docs(backlog): security-triage 2026-07-28 — die sieben Aufräum-Items - #287
Conversation
Die erreichbaren Funde der Triage sind gefixt und deployt (mcp 1.26.0 → 1.28.1, moltrust-mcp-server #14; MoltGuard npm audit fix, moltguard #10). Was übrig bleibt, sind Struktur- und Hygiene-Probleme, die kein Versions-Bump löst: - pypdf streichen statt hochziehen (tote Dep, 4 Advisories, nirgends importiert) - liboqs-Pin klären (requirements pinnt 0.15.0, die Prod-venv kennt es nicht) - email → EmailStr (app/main.py:1219; der CR/LF-Fund läuft heute nur ins Leere, weil die stdlib serialisierungsseitig blockt — geprüft auf 3.12.3) - aiosmtplib/mcp/moltrust-mcp-server in requirements deklarieren (alle drei laufen, keiner steht drin) - Port-Check verwirft die Bind-Adresse (Z. ~186) → Fehlalarm auf 3006, und 8168 mit *-Binding würde er weiterhin nicht als solches erkennen - ruff in moltrust-mcp-server/ci.yml pinnen (ungepinnt, hat #14 rot gemacht) - Report-Abschnitt 1e: DID-Core-Link veraltet, und 1e prüft nichts Beim letzten Punkt weicht der Eintrag von der Vorlage ab: ein kaputter Markdown-Link ließ sich nicht belegen. 1e schreibt nackte URLs in einen Plaintext-Report, beide antworten 200; der Telegram-Pfad sendet zwar mit parse_mode=HTML, überträgt aber nur die Alert-Zeilen, nicht den Reportkörper. Belegbar sind nur der veraltete DID-Core-Verweis und die fehlende Mechanik. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`liboqs-python==0.15.0` ist seit dem 2026-07-28 nicht mehr auf PyPI; das Projekt serviert nur noch 0.16.0, 0.15.0 antwortet 404. Damit scheitert `pip install -r requirements.txt`, und jeder PR im Repo läuft rot — auch reine Docs-PRs. Der letzte grüne Lauf auf main war 93ac358. Gestrichen statt auf 0.16.0 gehoben. Das entspricht dem, was tatsächlich läuft: die Prod-venv hat das Paket nie gehabt, `is_available()` in app/crypto/dilithium.py liest dort False, und es sind keine DILITHIUM_*-Variablen gesetzt. Der Import von `oqs` sitzt innerhalb der Funktionen, die Degradation ist gewollt und getestet. Ein Bump hätte bei jedem frischen Install eine PQC-Bibliothek hereingezogen, die kein Codepfad aufruft. Die Begründung des ursprünglichen Hard-Pins bleibt als Kommentar an der Fundstelle stehen, ausdrücklich mit der Bitte, ihn nicht blind wieder einzusetzen: der Supply-Chain-Einwand gegen ein pre-1.0, nicht FIPS-validiertes C-Binding (3-Modell-Review-Konsens) gilt weiter. Er ist nur nicht mit `==` gegen ein Projekt lösbar, das seine Releases zurückzieht — 0.10.2 existierte nie, 0.14.1/0.15.0 waren die realen, und 0.15.0 ist jetzt auch weg. Wieder deklarieren, wenn PQC scharf geht: gepinnt, gegen das dann existierende Release, und mit im Deploy verifizierter Installation statt angenommener. Verifiziert: `pip install --dry-run -r requirements.txt` in einer frischen venv auf Python 3.12.3 (die CI-Version) löst vollständig auf, rc=0. BACKLOG-Eintrag entsprechend von "offen" auf "erledigt" gezogen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Zweiter Commit: der liboqs-Pin ist raus — er hatte die CI des ganzen Repos rot gemachtBeim ersten Push fielen beide pytest-Jobs um, auf einem PR, der nur
Gestrichen, nicht auf 0.16.0 gehoben. Das entspricht dem Ist-Zustand:
Ein Bump hätte bei jedem frischen Install eine PQC-Bibliothek hereingezogen, die kein Codepfad aufruft. Die Begründung des ursprünglichen Hard-Pins bleibt als Kommentar an der Fundstelle stehen, ausdrücklich mit der Bitte, ihn nicht blind wieder einzusetzen. Der Supply-Chain-Einwand gegen ein pre-1.0, nicht FIPS-validiertes C-Binding (3-Modell-Review-Konsens, Gemini + Perplexity) gilt weiter — er ist nur nicht mit Wieder deklarieren, wenn PQC scharf geht: gepinnt, gegen das dann existierende Release, und mit im Deploy verifizierter Installation statt angenommener. Verifiziert: Nebenbefund aus derselben Auflösung: ein frischer Install zöge |
Backlog-Nachtrag zur Triage der drei Alerts aus dem
security_check.sh-Lauf vom 2026-07-26. Nurdocs/BACKLOG.md, kein Code.Erledigt und deployt (nicht Teil dieses PRs)
npm audit fix, non-major)Was hier ins Backlog geht
Sieben Items, keines davon ein erreichbarer Pfad, jedes ein Struktur- oder Hygieneproblem, das ein Versions-Bump nicht löst:
Required-byleerrequirements.txtpinnt0.15.0, die Prod-venv kennt das Paket nicht; der Pin ist wirkungslos und pip-audit kann dazu gar nichts sagenemail→EmailStr(app/main.py:1219) — der aiosmtplib-CR/LF-Fund läuft heute nur deshalb ins Leere, weil die stdlib beim SerialisierenHeaderParseErrorwirft (auf Python 3.12.3 geprüft). Die Validierung fehlt trotzdem und hängt an fremdem Verhaltenaiosmtplib,mcp,moltrust-mcp-serverinrequirements.txtdeklarieren — alle drei laufen, keiner steht drin; einpip install -r requirements.txtauf frischer Maschine brächte den MCP-Server nicht mitscripts/security_check.shZ. ~186) —grep -oP ':\K[0-9]+$'verwirft die Bind-Adresse,127.0.0.1:3006und0.0.0.0:3006sind für den Check identisch. Daher der Fehlalarm. Konkreter Kandidat, den er danach fangen würde: 8168 (moltrust-uresolver.service) bindet auf*:8168ruffinmoltrust-mcp-server/.github/workflows/ci.ymlpinnen —pip install ruffohne Pin; ruff 0.16.0 hat ci: initial GitHub Actions workflow (install + syntax + pytest collect) #14 rot gemacht, mit einemI001auf eine Datei, die der PR nicht angefasst hatte/TR/did-core/→/TR/did-1.0/), und 1e prüft nichts, es druckt zwei URLs und einen MerksatzAbweichung von der Vorlage
Punkt 7 war als „kaputte W3C-Markdown-Links" notiert. Das ließ sich nicht belegen: 1e schreibt nackte URLs in einen Plaintext-Report, beide antworten 200. Der Telegram-Pfad sendet zwar mit
parse_mode="HTML", überträgt aber nur dasALERTS-Array und nie den Reportkörper — 1e läuft dort gar nicht durch, die Mail geht alsMIMEText(body, 'plain')raus. Im Eintrag steht deshalb nur, was geprüft ist: der veraltete Verweis und die fehlende Mechanik.🤖 Generated with Claude Code