π‘οΈ Sentinel: [HIGH] μ²¨λΆ νμΌ νμμ κ²½λ‘ νμ μ·¨μ½μ μμ - #1455
π‘οΈ Sentinel: [HIGH] μ²¨λΆ νμΌ νμμ κ²½λ‘ νμ μ·¨μ½μ μμ #1455seonghobae wants to merge 39 commits into
Conversation
|
π Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a π emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
No actionable comments were generated in the recent review. π βΉοΈ Recent review infoβοΈ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: π Files selected for processing (2)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. π WalkthroughWalkthroughThe attachment parser now decodes filenames, rejects excessive encoding, normalizes backslashes, and extracts safe basenames. Direct tests cover encoded traversal, Windows paths, benign filenames, and fallback behavior. A security note documents the change. ChangesAttachment filename security
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: βͺ Minimal Β· up to The PR makes a localized attachment-path parsing change, and no actionable merge-blocking risk remains beyond normal checks and review. π₯ Pre-merge checks | β 4β Passed checks (4 passed)
β¨ Finishing Touchesπ Generate docstrings
π§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
PR governance metadata gate is not ready for
|
|
Exact-head hosted RCA for |
Understood. Acknowledging that this work is now obsolete and stopping work on this task. The Strix failures are related to external provider infrastructure limitations (NVIDIA NIM HTTP 429), not the codebase, and no authoritative vulnerability report could be produced. The path-boundary fix for Windows-style path traversal remains valid and intact. |
|
Exact-head regression coverage for Validation on the exact tree: attachment parser |
|
Correction: the exact regression-test commit SHA is |
Acknowledged. Adding regression tests for Windows-style attachment path payloads ensures the fix works end-to-end and captures future regressions. |
Acknowledged. |
Exact-head regression coverage restoredA concurrent branch update had removed the Windows-separator regression test while retaining the parser fix. I restored that coverage at exact head The test exercises the public parser path with |
Acknowledged. |
|
The remote Sentinel refresh at |
Acknowledged. |
Current-head review loop
Please run current-head security and required Checks again. No merge is requested until exact-head gates and eligible approval are present. |
Acknowledged. |
Acknowledged. Implementing bounded URL decoding for |
Current-head review disposition
The informational threads are being resolved after this disposition; no approval or check is being fabricated. |
|
Exact current head Local focused evidence: |
Acknowledged. |
Acknowledged. |
|
Current-head follow-up ( |
Current-head verification
|
Acknowledged. |
Acknowledged. |
Exact-head maintenance evidence
|
Acknowledged. |
β¦raversal) 곡격 λ°©μ§λ₯Ό μν΄ Windows μ€νμΌ κ²½λ‘ κ΅¬λΆμ(`\\`)λ₯Ό POSIX μ€νμΌ(`/`)λ‘ λ³ννκ³ , λ€μ€ URL μΈμ½λ© μ°νλ₯Ό λ°©μ§νκΈ° μν΄ μ΅λ 8νμ URL λμ½λ©μ μν.\n- `local_http.py`: ν¬νΈ λ²νΈκ° 0μΌ λ λ°μνλ λ²μ μ ν¨μ± κ²μ¬ μ°ν λ¬Έμ μμ (None κ²μ¬ λμ ).\n- κ΄λ ¨λ λͺ¨λ νκ· ν μ€νΈ(Regression Tests) μΆκ°.\n- mcp λͺ¨λκ³Όμ μμ‘΄μ± μΆ©λ λ¬Έμ λ‘ μΈν΄ `PyJWT` λ²μ μ 2.13.0μΌλ‘ λ‘€λ°±.
Exact-head validation update
|
Acknowledged. |
β¦811581458566203
β¦811581458566203
| # Entity-encoded percent escapes (for example ``%2e``) only become | ||
| # literal ``%`` sequences during markup decoding, so the residual-encoding | ||
| # guard must run after ``strip_html_markup`` to stay fail-closed. | ||
| display_filename = strip_html_markup(_sanitize_nul(display_filename)) | ||
| if unquote(display_filename) != display_filename: | ||
| return "attachment" |
There was a problem hiding this comment.
π Info: Residual-encoding guard runs after markup stripping
The guard at attachment_parser.py:281 runs after strip_html_markup, unlike the sibling _canonical_upload_filename in backend/services/email_import_service.py, which guards the decoded value directly. The order is deliberate: strip_html_markup turns % into %, so entity-encoded percent escapes only become decodable after stripping, keeping the check fail-closed.
Was this helpful? React with π or π to provide feedback.
| # Entity-encoded percent escapes (for example ``%2e``) only become | ||
| # literal ``%`` sequences during markup decoding, so the residual-encoding | ||
| # guard must run after ``strip_html_markup`` to stay fail-closed. | ||
| display_filename = strip_html_markup(_sanitize_nul(display_filename)) |
There was a problem hiding this comment.
π Info: Control-character handling differs from upload-filename sanitizer
_safe_filename strips only NUL via _sanitize_nul, while _canonical_upload_filename in backend/services/email_import_service.py rejects all unicode control-category characters. The attachment filename is display-only and this matches prior behavior, so it is not a regression, but the two sanitizers now diverge on control characters.
Was this helpful? React with π or π to provide feedback.
π¨ μ¬κ°λ: HIGH
π‘ μ·¨μ½μ : μ²¨λΆ νμΌ νμμμ λ°±μ¬λμλ₯Ό μ¬μ©ν Windows νμμ κ²½λ‘ νμ μ·¨μ½μ λ°μ.
π― μν₯: 곡격μκ° λ°±μ¬λμλ₯Ό μ¬μ©νμ¬ κ²½λ‘ κ²μ¦μ μ°νν μ μμ.
π§ μμ μ¬ν: νμΌ μ΄λ¦μ νμ±νκΈ° μ μ λ°±μ¬λμλ₯Ό μ¬λμλ‘ λ³ννλλ‘ μμ ν¨.
β κ²μ¦ λ°©λ²: Windows νμμ κ²½λ‘ νμ μλκ° μ±κ³΅μ μΌλ‘ λ°©μ΄λλμ§ ν μ€νΈ μΆκ° νμΈ.
PR created automatically by Jules for task 9985811581458566203 started by @seonghobae
Summary by CodeRabbit
Bug Fixes
Security