Skip to content

docs(backlog): security-triage 2026-07-28 — die sieben Aufräum-Items - #287

Merged
MoltyCel merged 2 commits into
mainfrom
docs/backlog-security-triage-20260728
Jul 28, 2026
Merged

docs(backlog): security-triage 2026-07-28 — die sieben Aufräum-Items#287
MoltyCel merged 2 commits into
mainfrom
docs/backlog-security-triage-20260728

Conversation

@MoltyCel

Copy link
Copy Markdown
Owner

Backlog-Nachtrag zur Triage der drei Alerts aus dem security_check.sh-Lauf vom 2026-07-26. Nur docs/BACKLOG.md, kein Code.

Erledigt und deployt (nicht Teil dieses PRs)

Fund Status
mcp 1.26.0 → 1.28.1 (GHSA-jpw9-pfvf-9f58, HIGH, erreichbarer Transport) moltrust-mcp-server #14, gemergt + deployt
MoltGuard 6 high → 0 (npm audit fix, non-major) moltguard #10, gemergt + deployt
Port 3006 „unexpected open" Fehlalarm, keine Regression — MoltProof bindet auf 127.0.0.1, extern gefiltert

Was hier ins Backlog geht

Sieben Items, keines davon ein erreichbarer Pfad, jedes ein Struktur- oder Hygieneproblem, das ein Versions-Bump nicht löst:

  1. pypdf streichen statt hochziehen — 4 Advisories (2 HIGH), aber nirgends importiert, Required-by leer
  2. liboqs-Pin klärenrequirements.txt pinnt 0.15.0, die Prod-venv kennt das Paket nicht; der Pin ist wirkungslos und pip-audit kann dazu gar nichts sagen
  3. emailEmailStr (app/main.py:1219) — der aiosmtplib-CR/LF-Fund läuft heute nur deshalb ins Leere, weil die stdlib beim Serialisieren HeaderParseError wirft (auf Python 3.12.3 geprüft). Die Validierung fehlt trotzdem und hängt an fremdem Verhalten
  4. aiosmtplib, mcp, moltrust-mcp-server in requirements.txt deklarieren — alle drei laufen, keiner steht drin; ein pip install -r requirements.txt auf frischer Maschine brächte den MCP-Server nicht mit
  5. Port-Check reparieren (scripts/security_check.sh Z. ~186) — grep -oP ':\K[0-9]+$' verwirft die Bind-Adresse, 127.0.0.1:3006 und 0.0.0.0:3006 sind für den Check identisch. Daher der Fehlalarm. Konkreter Kandidat, den er danach fangen würde: 8168 (moltrust-uresolver.service) bindet auf *:8168
  6. ruff in moltrust-mcp-server/.github/workflows/ci.yml pinnenpip install ruff ohne Pin; ruff 0.16.0 hat ci: initial GitHub Actions workflow (install + syntax + pytest collect) #14 rot gemacht, mit einem I001 auf eine Datei, die der PR nicht angefasst hatte
  7. Report-Abschnitt 1e — DID-Core-Link veraltet (/TR/did-core//TR/did-1.0/), und 1e prüft nichts, es druckt zwei URLs und einen Merksatz

Abweichung 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 das ALERTS-Array und nie den Reportkörper — 1e läuft dort gar nicht durch, die Mail geht als MIMEText(body, 'plain') raus. Im Eintrag steht deshalb nur, was geprüft ist: der veraltete Verweis und die fehlende Mechanik.

🤖 Generated with Claude Code

MoltyCel and others added 2 commits July 28, 2026 13:57
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>
@MoltyCel

Copy link
Copy Markdown
Owner Author

Zweiter Commit: der liboqs-Pin ist raus — er hatte die CI des ganzen Repos rot gemacht

Beim ersten Push fielen beide pytest-Jobs um, auf einem PR, der nur docs/BACKLOG.md anfasste:

ERROR: Could not find a version that satisfies the requirement
       liboqs-python==0.15.0 (from versions: 0.16.0)
ERROR: No matching distribution found for liboqs-python==0.15.0

liboqs-python 0.15.0 ist von PyPI verschwunden — das Projekt serviert nur noch 0.16.0, /pypi/liboqs-python/0.15.0/json gibt 404. Damit scheitert pip install -r requirements.txt, und jeder PR im Repo lief rot, unabhängig vom Inhalt. Letzter grüner Lauf auf main war 93ac358.

Gestrichen, nicht auf 0.16.0 gehoben. Das entspricht dem Ist-Zustand:

Prod-venv hat das Paket nie gehabt
is_available() in app/crypto/dilithium.py liest dort False
DILITHIUM_*-Variablen keine gesetzt
import oqs liegt innerhalb der Funktionen, Degradation ist gewollt

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 == gegen ein Projekt lösbar, das seine Releases zurückzieht. Die Historie im Kommentar zeigt das Muster: 0.10.2 wurde vom Review zitiert und existierte nie, dann waren 0.14.1/0.15.0 die realen (verifiziert 2026-07-03), und jetzt ist 0.15.0 ebenfalls 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 — der Version, die die CI fährt — löst vollständig auf, rc=0.

Nebenbefund aus derselben Auflösung: ein frischer Install zöge pypdf-6.14.2, also die gepatchte Fassung. Die Prod-venv steht auf 6.13.3, weil sie älter installiert wurde. Ändert nichts am Backlog-Item, pypdf gehört gestrichen statt hochgezogen — es wird nirgends importiert.

@MoltyCel
MoltyCel merged commit 05fd9b7 into main Jul 28, 2026
12 checks passed
@MoltyCel
MoltyCel deleted the docs/backlog-security-triage-20260728 branch July 28, 2026 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant