{
  "schemaVersion": 1,
  "caseId": "aiohttp-cve-2024-23334",
  "originalReport": {
    "sha256": "031e2f8893a9fd7f98086e4198334864286ff87e2e999841e3caea176f85a388",
    "schemaVersion": 2
  },
  "scan": {
    "runStatus": "complete",
    "incompleteReason": null
  },
  "finding": {
    "file": "web_urldispatcher.py",
    "line": 666,
    "status": "needs_human",
    "title": "Static file handler skips containment check when follow_symlinks=True, allowing ../ traversal outside static root",
    "snippet": "                raise HTTPForbidden()\n            filepath = self._directory.joinpath(filename).resolve()\n            if not self._follow_symlinks:\n                filepath.relative_to(self._directory)\n        except (ValueError, FileNotFoundError) as error:",
    "reportedFileSha256": "b1b94157270084a5453d16ed7db646b2b3e2bcb2f4b2c91e1372d13cad8379e7"
  },
  "review": {
    "model": "codex",
    "family": "openai",
    "verdict": "plausible",
    "detail": "plausible: 片段中的缺陷成立：相對路徑「../」不會被 anchor 檢查擋住，resolve() 可將它解析至靜態根目錄之外，而 follow_symlinks=True 會略過唯一的目錄範圍檢查；外部檔案若存在，便會進入 FileResponse。GET 路由明確綁定此處理函式，因此這不是死碼，且可跨越公開靜態目錄與其他伺服器檔案之間的邊界，但實際遠端可利用性仍需驗證。",
    "omissionReason": null
  },
  "publicSource": {
    "url": "https://github.com/aio-libs/aiohttp/blob/v3.9.1/aiohttp/web_urldispatcher.py#L666",
    "commit": null,
    "sourceBytesVerified": false
  },
  "limitations": {
    "zh": "僅節錄此已公開歷史漏洞對應 finding 與有效覆核原文；原始報告不公開，未納入其他候選、環境或錯誤堆疊。模型文字是當時的分析主張，不是利用成功或人工確認。reportedFileSha256 僅為原報告所記雜湊，未重新核對歷史來源位元組；tag 行號連結只是公開參考，commit 未知。此人工選編與兩種 SHA-256 都不是簽章或可信執行證明。",
    "en": "Only the finding for this disclosed historical vulnerability and any valid review text are excerpted verbatim. The original report is not public; other findings, environment data and error traces are excluded. Model text is a historical analysis claim, not successful exploitation or human confirmation. reportedFileSha256 is copied from the report; historical source bytes were not independently rechecked. The tag and line URL is a public reference only; the commit is unknown. Curation and either SHA-256 are not signatures or trusted execution proof."
  }
}
