Skip to content

[Wave 3] Medium — Module sweep: Dev tooling: code, release & supply-chain guards and generators #549

Open

Description

@cemililik

Wave 3 · 3 finding(s) in 3 fix package(s). Fix these whenever a pull request touches this module ("clean the module you touch").

Findings

  • CR-A17b-001 (code, Medium) — Comment-led logical-line skip with a raw bracket counter blinds the HTTP-discipline and sys.modules-pop guards to code after any comment holding an unmatched bracket
    severity Medium · reachability default · intent contract-violation · confidence confirmed · independently confirmed · reproduced end to end
    Failure scenario. A contributor adds a direct requests.post (or import requests as rq; rq.post) under a comment with an open parenthesis. CI stays green, and the new call bypasses SSRF pinning, the https and redirect policy and secret masking.
    Where. tools/check_http_discipline.py:78-96 (confirmed), tools/check_http_discipline.py:99-110, tools/check_http_discipline.py:102-105 (confirmed), forgelm/judge.py:161 (confirmed)
    Recommended fix. Replace the regex/paren-counting scan with an ast-based visitor: resolve Import/ImportFrom aliases for requests, httpx, urllib.request, urllib3, http.client, aiohttp and socket, and flag any Call whose func resolves into those modules. Comments then disappear from the analysis naturally.

  • CR-A17b-002 (code, Medium) — supply_chain_security.md and workflow comments misstate what the bandit/pip-audit gates do
    severity Medium · reachability default · intent contract-violation · confidence confirmed · independently confirmed · reproduced end to end
    Failure scenario. An auditor relies on the doc's claim that nosec suppressions are verified for justification. They are not, so an unexplained # nosec silently hides a HIGH finding.
    Where. docs/reference/supply_chain_security.md:192-194 (nosec justification claim; :191 is blank), docs/reference/supply_chain_security.md:181-194, tools/check_bandit.py:64-160, .github/workflows/ci.yml:517-524
    Recommended fix. Correct the doc. Have check_bandit fail (or warn) on a non-empty errors[], and implement or remove the nosec-justification claim.

  • CR-A17b-003 (code, Medium) — Supply-chain severity wrappers (check_bandit, check_pip_audit) never check scan completeness, so reports that scanned or audited nothing pass behind '|| true'
    severity Medium · reachability default · intent contract-violation · confidence confirmed · independently confirmed · reproduced end to end
    Failure scenario. pip-audit changes its JSON shape or emits a partial report, or bandit fails to parse a module. The nightly or CI gate stays green while nothing, or not everything, was scanned.
    Where. tools/check_pip_audit.py:170-181 (confirmed), tools/check_bandit.py:98-119 (confirmed), .github/workflows/nightly.yml:333-334, .github/workflows/ci.yml:523-524 (confirmed)
    Recommended fix. Require 'dependencies' to be a present list (as check_bandit does for 'results'), surface skip_reason entries (warn or fail), pass --strict in the nightly, and fail check_bandit on a non-empty 'errors' list.

Done when

  • Every finding above is fixed or closed with a reason (tick it here).
  • Code fixes carry a test; doc fixes update the Turkish mirror in the same PR.

Found by the October 2026 ForgeLM code and documentation review against commit cab2947. Code links point at that commit; line numbers may have moved since. Finding IDs (CR-…, DOC-…, TECH-…) are stable references for this backlog.

Activity

  1. added
    bugSomething isn't working
    securitySecurity-relevant
    severity: mediumReal defect with limited reach or a workaround
    source: review-2026-10Found by the October 2026 code and documentation review
    wave: 3Roadmap wave 3: medium severity, module sweeps
    on Oct 9, 2026
  2. cemililik commented on Oct 9, 2026

    @cemililik
    CollaboratorAuthor

    Additional detail from the September 2026 independent review (F-W1-GUARDS-02), re-verified against development at f94595f on 2026-10-09.

    CR-A17b-003 asks for dependencies to be a present list; the same completeness gap exists one level down in _iter_findings (tools/check_pip_audit.py:170-181). A non-object dependency entry is skipped, an object-valued vulns is iterated as its string keys and discarded, and non-object vulnerability items are dropped, so a HIGH finding in such an entry exits 0. Reproduced: a report whose vulns is an object, plus a string dependency entry, yields no findings. Treat each of these shapes as a schema error (non-zero exit) and add them to tests/test_check_pip_audit.py.

    Code links point at cab2947; line numbers may have moved since.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: dev-toolingCode area: dev-toolingbugSomething isn't workingsecuritySecurity-relevantseverity: mediumReal defect with limited reach or a workaroundsource: review-2026-10Found by the October 2026 code and documentation reviewwave: 3Roadmap wave 3: medium severity, module sweeps

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions