feat: verify S226 @g5n-dev bounty — NO verdict, SSRF claim is speculative (#538)#350
Open
xliry wants to merge 4 commits intopeteromallet:mainfrom
Open
feat: verify S226 @g5n-dev bounty — NO verdict, SSRF claim is speculative (#538)#350xliry wants to merge 4 commits intopeteromallet:mainfrom
xliry wants to merge 4 commits intopeteromallet:mainfrom
Conversation
… (#451) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…eld confirmed (#456) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…tive (#538) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue: #204
Submission: #204 (comment)
Author: @g5n-dev
Problem (in our own words)
S226 claims
_download(filename)inupdate_skill.pyis vulnerable to SSRF because thefilenameparameter is concatenated into a URL without validation, and raises concerns about missing HTTPS certificate validation and repository compromise risk.Evidence
desloppify/app/commands/update_skill.py:22-31:_RAW_BASEis hardcoded,_download()concatenatesfilenamewithout validationdesloppify/app/commands/update_skill.py:88-89:_download()called only with"SKILL.md"andf"{overlay_name}.md"— both hardcoded constantsdesloppify/app/skill_docs.py:34-42:SKILL_TARGETSis a module-level constant dict with fixed overlay names ("CLAUDE","CURSOR","COPILOT", etc.)desloppify/app/commands/update_skill.py:112-116:interfacevalidated againstSKILL_TARGETSkeys before reaching_download()_download()Fix
No fix needed — verdict is NO
Verdict
_download()only receives hardcoded constant filenames; no user input reaches itFinal verdict: NO
Scores
Summary
The submission claims SSRF via
_download(filename)butfilenameis never user-controlled — it's always derived from hardcodedSKILL_TARGETSconstants. The MITM/certificate claim is factually wrong (Python's urllib validates HTTPS certs by default since 3.4). The PoC states "if a future caller passes user-controlled input," which is speculative. Same author as S219/S220/S222/S224/S225 (all NO).Why Desloppify Missed This
# noqa: S310suppresses Bandit's blanketurlopenwarning; this is a valid false-positive suppression, not a vulnerabilityVerdict Files
Generated with Lota