ソースを参照

docs: mark SEC_REVIEW F72 as fixed in dd4f688

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chiappa 4 日 前
コミット
1bb36fe03b
1 ファイル変更19 行追加1 行削除
  1. 19 1
      doc/SEC_REVIEW.md

+ 19 - 1
doc/SEC_REVIEW.md

@@ -11,7 +11,7 @@
 >
 > Each finding is referenced as **F<N>** for later citation.
 >
-> **Findings rolled up:** 5 sev-3 (5 fixed, 0 open), 27 sev-2 (27 fixed, 0 open), 42 sev-1 (39 fixed, 3 open).
+> **Findings rolled up:** 5 sev-3 (5 fixed, 0 open), 27 sev-2 (27 fixed, 0 open), 42 sev-1 (40 fixed, 2 open).
 
 ---
 
@@ -2304,6 +2304,24 @@
   a few KB but mitigations are environment-specific. Tighten the
   regex to a strict IP character class.
 - **Severity: 1**
+- **Status:** Fixed by extending the F43 charset constraint with a
+  per-route length cap. Both routes
+  (`/api/v1/admin/ips/{ip}` and `/app/ips/{ip}`) now use
+  `[0-9a-fA-F.:%]{1,80}` instead of `[0-9a-fA-F.:%]+`. 80 chars
+  covers IPv4 (≤15), canonical IPv6 (≤39), and IPv6 with every
+  colon urlencoded as `%3A` (≤53) with comfortable headroom.
+  Anything past that — including the 10 MB string the SEC_REVIEW
+  called out — fails to match the route and 404s before
+  `rawurldecode` is invoked, before `IpAddress::fromString` runs
+  any regex, and before any future code path could read the param
+  as a filename / log key / downstream URL component. The web
+  server's URL-length limit is still the outermost bound; this
+  change is the deterministic application-layer cap that doesn't
+  rely on the deployment environment. Regression tests added in
+  `api/tests/Integration/Admin/IpsControllerTest.php` —
+  `testDetailRejectsNonIpShapedPaths` data-provider gains
+  `oversized digits` (81 ones) and `oversized hex` (200 a's),
+  both 404.
 
 ### F73 — UI `JsonExceptionHandler` `getCode()` type-juggling for HTTP status
 - **File:** `ui/src/Http/JsonExceptionHandler.php:40-63`