Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Restore dependency security gate while preserving the course runtime pin

Aperta
#449 10 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python

Direzione di ricerca

Start with root pyproject.toml and uv.lock, then read core/tests/test_pyjwt_dependency_security.py and scripts/ci.py for the dependency and verification conventions. Add the specified JWT and urllib3 regression coverage in the two named test files, preserving the existing tests and runtime pin. Done means the locked versions, targeted tests, affected coverage, security scan, and required independent verification evidence all pass without unrelated changes.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

auth bug human integration P1 security

Restore the dependency security gate and preserve the course runtime

The required security gate exposed four advisories in the existing application lock. Remediate those dependencies so course backend unification can continue without changing visible behavior or activating a different course runtime.

Authority

Independently verified intake

At origin/main c5f4b301197394812b1d95ed69389fe87e90b787, the application locks PyJWT 2.14.0, urllib3 2.7.0, and community-base 0.5.10 from immutable tag v0.5.10 resolved to 4c692db461f4c7cbbc2f60afaa05162987a640f6.

Locked dependency Advisory Upstream finding First fixed release
PyJWT 2.14.0 CVE-2026-101918 / GHSA-42vr-xj54-vc7v Deeply nested JWT payload leaks RecursionError before signature verification 2.15.0
urllib3 2.7.0 CVE-2026-97687 / GHSA-8988-9cw3-xx77 HTTPS proxy TLS policy ignored or overridden 2.8.0
urllib3 2.7.0 CVE-2026-97689 / GHSA-vxq7-64xx-v4gw Unbounded chunk-size line buffering 2.8.0
urllib3 2.7.0 CVE-2026-97688 / GHSA-gh4c-6fx4-qh6g Chunked Deflate streaming infinite loop 2.8.0

Primary sources: PyJWT CNA record, PyJWT advisory, 2.15.0 changelog, urllib3 2.8.0 release, proxy TLS advisory, chunk-size advisory, Deflate advisory. PM checked all three maintainer advisory API records for exact CVE mappings; release-note order alone is insufficient. Medium upstream severity does not waive this site's fail-closed scanner policy.

Frozen #446 evidence, read-only in /data/agents/dtc-website/worktrees/issue-446-source-policy:

  • .tmp/dtc446/SWE-handoff.md: SHA-256 2e9a67e068156177d8909fc7edb8cf633eba5465439b33fd1f2e0d9850a18abf.
  • .tmp/dtc446/v22-corrected/security-check.log: SHA-256 d4d89cc704a69574ec0242235cd2d92a67943faad5f1a52c58bd2751ebd5356c; four blocking findings.
  • .tmp/dtc446/v22-corrected/security-findings.json: SHA-256 de49ce729bc4f7c1a92b880eef7aaeba839011334aa91b3b54738c8065c77ae6; audit exit 1, root lock SHA-256 d634452d31e2dd7fde510713c1866bf01a092ec98a293f9dd310c0312d8a5b78.

PM independently read and hashed those three files. They establish the failure, not a green receipt for #449.

Scope and expected files

  1. In an isolated engineer worktree based on the verified current main, raise the existing PyJWT floor to >=2.15,<3 and establish the existing transitive urllib3 security floor >=2.8,<3 in root pyproject.toml. Lock the minimal fixed releases 2.15.0 and 2.8.0 using targeted resolution in root uv.lock; retain other package versions/sources unless an actual resolver incompatibility requires a documented follow-up decision.
  2. Extend core/tests/test_pyjwt_dependency_security.py with real nested-payload regression coverage for unverified decode and PyJWKClient.get_signing_key_from_jwt, asserting documented safe PyJWT exceptions rather than raw RecursionError. Retain the existing real-signature, expiry, audience, algorithm and malformed-JWK tests.
  3. Add core/tests/test_urllib3_dependency_security.py with bounded synthetic advisory regression coverage for proxy/destination TLS separation, oversized chunk-size lines and malformed chunked Deflate termination, plus ordinary valid HTTP behavior. Exercise the locked library rather than replacing it with a mock. Use in-memory or isolated loopback fixtures and deterministic bounds; no public services, credentials or production endpoints. No new test dependency is authorized.

Expected tracked scope is exactly these four files. Scratch, baseline comparison logs and evidence remain under the isolated worktree's .tmp/. A runtime adapter incompatibility or additional advisory is a concrete stop-and-report condition for scope review, not permission for broad upgrades or production changes.

Non-goals

  • No community-base runtime upgrade, branch/local source, tag or resolved-commit change.
  • No course schema, storage, readers/writers, migration, content projection, route, template, static, UI, feature or learner-history change.
  • No scanner/policy/threshold change, audit waiver, advisory suppression, ignore-list addition or stale evidence reuse.
  • No production access, credential access, shared/live database reset, deployment or real-provider traffic during implementation/verification.
  • No edits/rebase to the frozen #446 worktree, its proof project or another agent's work.

Dependencies and coordination

This issue has no open implementation prerequisite. #446 depends on this reviewed dependency baseline before its final security evidence and downstream acceptance can pass. After #449 is accepted and merged, the #446 owner must integrate that baseline in its own worktree, regenerate its plan and fresh relevant evidence, and retain the root 0.5.10 versus isolated proof-project distinction. Prior #446 v21 runtime-upgrade success evidence is superseded.

Acceptance criteria

  • AC1: Root declaration/lock resolve PyJWT 2.15.0 and urllib3 2.8.0. Record the complete package version/source diff and explain metadata/hash churn. All unrelated package versions/sources remain unchanged, and root community-base remains v0.5.10 / 4c692db461f4c7cbbc2f60afaa05162987a640f6.
  • AC2: uv lock --check, uv pip check and fresh uv run --frozen python scripts/ci.py security-check pass on the exact candidate. Retain command output and .tmp/security/security-vulnerability-scan.json (or explicitly configured candidate-local output), showing scanner exit 0, no blocking findings and SHA-256 matching the candidate root lock. No green claim uses the old artifact.
  • AC3: New JWT and HTTP regression tests pass against the remediated locked libraries. Record a bounded isolated old-version comparison demonstrating the security regression is meaningful, without altering the candidate or frozen #446 environment. Existing positive behavior and safe denials remain green.
  • AC4: Affected existing auth/HTTP coverage passes: core.tests.test_pyjwt_dependency_security, accounts.tests.test_imported_account_social_matching, accounts.tests.test_auth_configuration, courses.tests.test_unit_url_validation, content_sync.tests.test_course_repository_transport_parity, content_sync.tests.test_course_repository_sync, core.tests.test_deployment_oidc_probe, and content.tests.test_public_media_store. Use normal test settings and synthetic isolated databases; do not invoke live OIDC/AWS probes. Prove no new external network or email side effect.
  • AC5: Engineer produces a fresh versioned plan and runs every required component using the maintained verification runner. Root dependency changes trigger full control-plane/SQLite regression coverage and container evidence; do not manually narrow the computed plan. Independent tester recomputes base/head/source manifest/graph/plan digests, verifies artifacts and executes required reruns. Both reports classify every component exactly once with commands/counts, artifact digests and reasons; no required skip or pending evidence is accepted.
  • AC6: Independent tester passes and PM accepts preservation of navigation, login/denial behavior, public and course behavior from the selected browser evidence before any engineer commit or orchestrator merge/push. On-call alone owns later post-push CI and deployment-image advisory evidence; a local audit does not replace that release gate.

Verification and browser scenarios

Generate the exact candidate plan and evidence with VERIFY_ISSUE=449 and issue-local output directories:

uv run --frozen python scripts/ci.py verification-plan
uv run --frozen python scripts/ci.py verification-run
uv run --frozen python scripts/ci.py verification-evidence-check
uv run --frozen python scripts/ci.py verification-report-check
VERIFY_CONSUMER=tester uv run --frozen python scripts/ci.py verification-plan
VERIFY_CONSUMER=tester VERIFY_PRODUCER_ROLE=tester VERIFY_PHASE=tester uv run --frozen python scripts/ci.py verification-run

The backend dependency change requires at least the maintained Playwright smoke tier: uv run --frozen python scripts/ci.py test-playwright-smoke, or a broader tier if selected by the graph. Use the existing local synthetic smoke scenarios for public navigation and account/course access/denial. Desktop/mobile product screenshot matrices are not_applicable for this exact no-render-change scope; record that reason in the computed report. If actual render impact appears, return to scope review and satisfy the graph-derived independent screenshot gate.

Freeze the uncommitted engineer worktree after posting exact source identity, package/source diff, command results/counts, lock/scanner hashes, plan/report/envelope digests and evidence paths. Recompute evidence if source, graph, policy, environment or relevant inputs change.

Lingua principale
Python
Stelle
0
Fork
0
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

  • Include un Dockerfile o un file Docker Compose
  • Nessun modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di DataTalksClub/website

Tutte le issue di DataTalksClub/website

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.