Repository navigation
Conversation
|
Security HOLD on exact de4f097. The loopback and bearer-token boundary is sound, but the claimed private persistent data boundary is not yet enforced. Settings::prepare_directory creates a 0700 directory only when it is new, then canonicalizes an existing path and opens server.lock with ordinary OpenOptions. It does not reject a symlink/reparse point, foreign-owned or group/world-accessible existing directory, a symlink/hardlink/non-regular lock, or a replacement between canonicalization and later path use. Runtime::open then opens the relative database.sqlite by pathname, so a pre-created database.sqlite symlink or hard link inside an accepted data directory can redirect native SQLite bootstrap/WAL writes outside the selected directory. The same pathname boundary is the basis for relative payload state. This repository already has the appropriate Unix pattern in completion_log: open the directory with O_NOFOLLOW|O_DIRECTORY, verify owner/mode, use openat on the held fd with O_NOFOLLOW, then fstat regular type, owner, private mode and nlink==1. Apply an equivalent anchored boundary to the development directory, lock, database and owned relative state; on Windows refuse reparse points and retain a handle-based identity through use. Existing state must either meet the same private ownership/type/link rules or refuse before the runtime opens or mutates it. Please add causal controls for an existing shared/foreign directory, a symlinked directory, symlink/hardlink/non-regular server.lock and database.sqlite, a parent/directory replacement between checks and use, and Windows reparse points, while retaining the fresh-directory and restart positives. No release artifact or registry qualification is implied by this source review. |
|
Security rebind at exact The selected directory is no longer accepted through canonicalization plus ordinary pathname opens. On Unix the implementation walks and retains directory descriptors, checks each ancestor, opens children and files with The exact predecessor findings are covered: shared/foreign/symlinked directories; symlink, hardlink, directory, FIFO/shared lock and SQLite state; nested payload links; held database replacement; held-parent replacement; plus fresh-directory, lock exclusion, persistence/restart, busy-port, worker/timer and signal positives. Refusals preserve the outside witness and occur before SQLite writes. I found no remaining source bypass of the bounded data boundary. This is a source/security rebind only. Current Windows/macOS builds and their staged-artifact refusal/lifecycle cases, complete exact-head CI, SDK package substitution, and normal release qualification remain separate gates; the existing shared PHP/bootstrap failures are not converted to PASS. |
|
Security bounded successor PASS at exact The Server dependency, Avro patch and both SQL patch pins move together from The only non-pin delta makes the existing foreign-owner refusal run in ordinary unprivileged Unix CI against a system-owned directory, while retaining the separate root-only causal fixture that constructs an exact foreign-owned private directory. It does not change This is a source rebind only. Exact-head platform artifacts, shared bootstrap/package gates and release qualification remain separate. |
|
|
Bounded source rebind PASS for exact The complete delta from reviewed
All new branches fail closed. |
|
Independent bounded classification for exact
The SARIF paths begin at the local |
|
Exact source CodeQL check The remaining failures are the pre-test PHP 8.3 archive setup and central caller admission, plus the resulting aggregate failure. Their shared repair is central #400/#404; its concrete organization-workflow selector change is already escalated once and awaits an administrator. Central #401 and SDK #279's registry-package follow-through remain dependencies. This source/artifact result does not publish the CLI or close #160. |



dw server:start-devnow starts the native Server and bundled SQLite inside the standalone CLI. Installingdwis enough to start from an empty directory, with no PHP, Docker, Redis, separate executable or runtime download.The command keeps persistent local data, binds loopback, enforces bearer authentication and shuts down HTTP and the native runtime on interruption. Its private data guard rejects shared or linked directories/files, special files and replaced identities before startup. Windows uses protected ACLs and held handles that deny deletion. Help and documentation show the startup and connection commands.
The engine and its Avro/SQL patches are pinned together to accepted Server source
3d90086f73533ac4437735bae6b9d0446558577c(development identity). SDK #279 provides the compiler-pin opt-out needed to compose the SDK with this engine; the current candidate pin must be replaced by its qualified registry package before release. The legacy PHP line is unchanged.Validation:
59809483009aec9aa189058a3dc450a4a9830af8pass the expanded smoke checks: Linux x86_64/aarch64, macOS x86_64/aarch64 and Windows x86_64. Its actual 2.x comparison and asset assembly also pass in run 43601809134.Remaining gates are the qualified SDK package, accepted central #401 caller record, shared PHP bootstrap repair (#400/#404), current independent review/hosted checks, and normal merge/main verification. Bootstrap failures remain pre-test NONPASS. No release is claimed. CLI #157 remains set aside.
Refs #160. Delivery is recorded after the published CLI passes the first-start acceptance.