Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions docs/audit/2026-09-13-BASELINE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Audit baseline — 2026-09-13

## Scope and evidence

Repository: `Cylae/server_script`; initial HEAD `a6adc51a3d10fbcdddb5f4b8045b670947e82285`.
`git status --short` and `git diff --check` were empty on arrival.
28 registered services, 20 open pull requests; see the dated branch triage.
GitHub CI run [34293303158](https://github.com/Cylae/server_script/actions/runs/34293303158) passed for this exact HEAD.

The environment initially lacked Cargo (`cargo build --locked`: exit 127).
Rust 1.98.1, rustfmt and clippy were subsequently installed. Local compilation and
installation of cargo-deny/cargo-audit are in progress at this discovery checkpoint.
No local test success is asserted here; final results belong in the dated final audit.

## Findings confirmed in the initial source

| ID | Severity | Evidence at initial HEAD | Impact |
|---|---|---|---|
| A01 | Critical | `core/users.rs:133-155` | Secret loading failure falls back to the known `admin` password. |
| A02 | High | `interface/cli.rs:381-476,667`; `services/infra.rs:72`; `services/apps.rs:276` | Plaintext credentials printed, duplicated, or stored in files without explicit protection. |
| A03 | High | `core/system.rs:164-196` | Newlines in passwords can inject extra records into chpasswd input. |
| A04 | High | `core/users.rs:261-279,229-245` | Last administrator protection checks a literal name and total users; demotion is unprotected. |
| A05 | High | `interface/web.rs:467-500` | Login uses cached credentials; clearing session data does not explicitly rotate its ID. |
| A06 | High | `interface/web.rs:658-661,1356-1359` | Authorization trusts the role captured at login, after deletion or demotion. |
| A07 | High | `core/config.rs:150-189`; `core/atomic_io.rs:57-78` | Non-atomic async writes; permission failures ignored; parent directory not fsynced. |
| A08 | High | `interface/cli.rs:180-208`; `core/ops.rs:111-119`; `services/infra.rs:203-210` | Host-wide cleanup and stopping unrelated web servers violate host preservation. |
| A09 | High | `interface/cli.rs:323-333,371-378,567-584,605-611` | Failed deployment/update can still return exit code zero. |
| A10 | High | `core/updater.rs:63-122` | Self-update tolerates pull/build failures, builds from wrong directory, never installs binary, yet reports success. |
| A11 | Medium | `core/config.rs:69-75,89-93`; `interface/web.rs:113-187` | Cache paths differ from persistence path selection; stale state can survive updates. |
| A12 | Medium | `src/lib.rs:69-70`; `services/apps.rs:98` | Disabled dependencies still referenced; YOURLS database is not initialized. |
| A13 | Medium | `services/infra.rs:195-200` | Proxy administration port 81 is publicly bound despite documentation. |

## Architectural limits requiring explicit reporting

`ProcessLock` is defined but not used by CLI mutations. The compensatory journal is
not wired into installation/apply. The web audit page must not claim complete or
immutable audit coverage. Personal app installation records names in users.yaml;
it does not deploy isolated per-user containers. Most image tags are `latest`.
The README promises an automatic web start and zero downtime that the code does not provide.
No real host deployment, quota enforcement, mail delivery or GPU transcoding has
been validated in this environment. A green unit-test CI does not establish these properties.

## Delivery

Changes are grouped into reviewable gate branches with regression tests and dated
evidence. Existing agent PRs are not merged solely on their descriptions. No branch
protection bypass, remote branch deletion or destructive history rewrite is used.
32 changes: 32 additions & 0 deletions docs/audit/2026-09-13-BRANCH-TRIAGE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Triage des branches — 13 septembre 2026

Base inspectée : `a6adc51a3d10fbcdddb5f4b8045b670947e82285`.
Sources : `git branch -r` et API GitHub `pulls?state=open&per_page=100`.
20 PR ouvertes et 20 branches de travail distantes à cette date. Les « 67 branches » du texte normatif sont un historique, pas l’inventaire actuel.

Ce triage exprime des recommandations issues du sujet et des écarts avec les contrats ; il ne certifie ni le diff complet ni les performances revendiquées de chaque PR. Aucune ancienne branche n’a été supprimée ou fusionnée dans cette mission.

| PR | Branche | Classement | Motif |
|---|---|---|---|
| #416 | `jules-5992953717060295136-253661ac` | à ignorer | Chevauchements sur les chemins/écritures ; une validation lexicale ne prouve pas le confinement des symlinks. À réexaminer après l’audit. |
| #415 | `jules-12468028964604981280-c35a1273` | à ignorer | Chevauchements sur les chemins/écritures ; une validation lexicale ne prouve pas le confinement des symlinks. À réexaminer après l’audit. |
| #414 | `fix/security-and-user-sorting-1430597682708282895` | à ignorer | Chevauchements sur les chemins/écritures ; une validation lexicale ne prouve pas le confinement des symlinks. À réexaminer après l’audit. |
| #413 | `jules-14022616465358029411-9f94621f` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #412 | `perf/cache-hardware-detection-17336695570065704145` | à ignorer | Mémoriser RAM/disques définitivement rend la détection obsolète ; benchmark revendiqué non reproduit. |
| #411 | `fix/useradd-absolute-path-13098466155646312693` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #410 | `perf/optimize-doctor-port-conflicts-13098466155646316055` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #409 | `perf/telemetry-poller-throttling-9685045745597693274` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #408 | `fix/integrate-validate-safe-path-10011583263562090100` | à ignorer | Chevauchements sur les chemins/écritures ; une validation lexicale ne prouve pas le confinement des symlinks. À réexaminer après l’audit. |
| #407 | `fix-command-injection-run-cli-toggle-2775550130301488844` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #406 | `fix/atomic-io-insecure-tempfile-10188298294900936929` | à ignorer | Chevauchements sur les chemins/écritures ; une validation lexicale ne prouve pas le confinement des symlinks. À réexaminer après l’audit. |
| #405 | `perf/users-list-alloc-optimization-16929115810620791053` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #404 | `fix/remove-unused-validate-domain-2958005753390998787` | à fermer | Retire des API publiques d’une bibliothèque sous prétexte de code mort ; absence de justification fonctionnelle. |
| #403 | `code-health/remove-unused-validate-port-str-7597355792170492956` | à fermer | Retire des API publiques d’une bibliothèque sous prétexte de code mort ; absence de justification fonctionnelle. |
| #402 | `fix/journal-recovery-test-13226370120388620467` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #401 | `remove-unused-is-public-portmapping-9151569566518202775` | à fermer | Retire des API publiques d’une bibliothèque sous prétexte de code mort ; absence de justification fonctionnelle. |
| #400 | `test-check-root-privilege-1541694811706861378` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #399 | `fix/remove-unused-generate-op-id-1337842746933228318` | à fermer | Retire des API publiques d’une bibliothèque sous prétexte de code mort ; absence de justification fonctionnelle. |
| #398 | `test/port-mapping-error-handling-16855835431767212044` | à ignorer | Changement potentiellement utile, à revoir/tester dans son périmètre ; aucune fusion automatique de cette PR. |
| #397 | `jules-16231249243070530309-c9278a62` | à ignorer | Priorité secondaire ; à revalider après les corrections fonctionnelles. |

Branches restantes : `origin/main` (référence, à ignorer), `origin/HEAD` (alias).
Loading