TP49 widerlegt und geschlossen — kein Fix, Doku korrigiert
Christoph hat die Praemisse am 2026-10-06 selbst widerlegt: testus@emsenhuber.com wird von CF Access abgelehnt. Die E-Mail-Bindung der Policy gilt, login_method hebelt sie nicht aus. Es gab nie eine offene Tuer. Der Fehler war ein Fehlschluss, kein Raten: Doku-Semantik zu login_method ("welche Methode wurde benutzt") wurde so gelesen, als ersetze der Include die danebenstehende email-Zeile. include ist ein OR — die Zeilen sind Alternativen, nicht Bedingungen. Aus "GitHub ist eine Alternative zur E-Mail" wurde "GitHub allein genuegt", und das stand als Tatsache in der Akte (Fund 2026-07-10). Belegt: kein IdP traegt eine Domain-Bindung (github/google/onetimepin alle nur client_id + redirect_url, live per GET .../identity_providers). Die Einschraenkung kann also nur aus der Policy kommen — und sie greift nachweislich. Grenze der Aussage: der GitHub-Pfad selbst wurde nicht gemessen, nur geschlossen. Korrigiert: teilprojekte.md TP49 (Herkunft des Fehlers mitgenannt), cf-tunnel- mapping.md Paragraf 10 (Ursprungsfund widerlegt, nicht geloescht), Startauftrag als "NICHT AUSFUEHREN" markiert. Kein Schreibzugriff auf die Terpenfinder-Policy; blauebluethen-Projektgrenze gewahrt. Erhalten bleiben nur die Gotchas: 32-Hex-App-IDs, cloudflare-MCP ist read-only (Write-Probe no-op-PUT -> 1010), Reusable Policy nur per App-PUT detachbar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2578,41 +2578,63 @@ Split-Horizon; Zugang via TP41-**WARP** gelöst (Geli 2026-09-10 via Android). D
|
||||
**interne** Namen blieb dabei übersehen — deshalb reopened, s.o.
|
||||
|
||||
<a id="tp49"></a>
|
||||
### TP49 · Gitea #76 — CF-Access: `login_method`-Includes auf Policy-Ebene ▸ 🔴 ABSOLUTE PRIORITÄT
|
||||
### TP49 · Gitea #76 — CF-Access: `login_method`-Includes auf Policy-Ebene — ❌ widerlegt, kein Handlungsbedarf
|
||||
|
||||
*(Angelegt 2026-10-06 auf Christoph-Direktive. Fund vom 2026-07-10, stand seither unbehoben in
|
||||
der Memory `project_cf_tunnel_1033` — beim Sichern der Memories wiederentdeckt.
|
||||
**Am 2026-10-06 live nachgeprüft: der Ursprungsbefund ist kleiner als notiert.**)*
|
||||
*(Angelegt 2026-10-06. Fund vom 2026-07-10 (Memory `project_cf_tunnel_1033`),
|
||||
**am 2026-10-06 als Phantom widerlegt und geschlossen.**)*
|
||||
|
||||
#### ⚠️ Korrigierte Lage (2026-10-06, live gegen die CF-API)
|
||||
> 🔴 **Der TP beruhte auf einer unbelegten Behauptung — auch der Prosa-Text dieses Abschnitts
|
||||
> selbst war Teil des Fehlers.** Ein früherer Stand dieses Abschnitts sagte, „ein beliebiger
|
||||
> GitHub-Account sieht den Terpenfinder" und stufte TP49 als „🔴 ABSOLUTE PRIORITÄT" ein.
|
||||
> Das war **falsch**. Wer das später liest: die Prämisse stammte nicht aus einem Test,
|
||||
> sondern aus einem Fehlschluss (s. Herkunft).
|
||||
|
||||
**Der interne Wildcard ist sauber.** TP41 hat `*.emsenhuber.net` (App `16aaec78…`) auf
|
||||
Access-Groups umgestellt — nachgeprüft, Policies `bf-users` / `bf4` / `claude-mcp` binden an
|
||||
`zt-humans` (drei einzelne E-Mail-Adressen), `zt-home` (`ip:90.146.33.177/32`) und
|
||||
`zt-automation` (service_token). ✅ **Kein `login_method` mehr an `hass`/`grafana`/`portainer`/`pve`.**
|
||||
#### Herkunft des Fehlers (2026-10-06, damit er nicht wiederkehrt)
|
||||
|
||||
**Offen ist genau ein Eintrag**, gefunden per Sweep über alle 9 Apps:
|
||||
`420.teilzeitladen.xyz` (Terpenfinder, **öffentlich**), Policy `christoph` trägt
|
||||
`login_method:github`. Der zweite Include (`onetimepin`) ist **unkritisch** — das ist der
|
||||
gewünschte E-Mail-Einmalcode.
|
||||
Die Doku-Aussage zu `login_method` („asks which identity service was used for authentication")
|
||||
wurde so gelesen, als hebe der Include die danebenstehende `email`-Zeile auf. **`include` ist ein
|
||||
**OR** — die Zeilen sind Alternativen, nicht Bedingungen. Aus „GitHub ist eine Alternative zur
|
||||
E-Mail" wurde fälschlich „GitHub allein genügt und ignoriert die E-Mail". Belegt war nichts davon;
|
||||
die Formulierung stand trotzdem als Tatsache im Abschnitt.
|
||||
|
||||
**Auswirkung:** ein beliebiger GitHub-Account sieht den Terpenfinder. Kein Zugriff auf die
|
||||
interne Infrastruktur — die kritische Tür war schon zu. Aber es ist eine offene Tür auf einer
|
||||
öffentlichen Domain, die „nur für uns" sein sollte.
|
||||
#### Gegenbeweis (Christoph, 2026-10-06, live getestet)
|
||||
|
||||
#### Fix
|
||||
`login_method:github` aus dem Include entfernen; `onetimepin` bleibt. Danach prüfen, dass
|
||||
`christoph` und `geli` über ihre E-Mail-Adressen weiter hineinkommen.
|
||||
⚠️ Vorher abstimmen (Christoph-Entscheid 2026-07-10) — Aussperrung wäre der teurere Fehler.
|
||||
**`testus@emsenhuber.com` wird abgelehnt.** Nur explizit freigeschaltete Adressen kommen durch —
|
||||
**die E-Mail-Bindung in der Policy gilt, `login_method` hebelt sie nicht aus.** Der Test lief über
|
||||
den **Google**-IdP, ist aber auf GitHub übertragbar, weil beide IdPs **konfigurationsgleich** sind:
|
||||
|
||||
#### Gotchas (live bestätigt)
|
||||
| IdP | Typ | `config` |
|
||||
|---|---|---|
|
||||
| `72c1291b…` | github | `client_id`, `redirect_url` — **kein** Domain-Filter |
|
||||
| `c7571880…` | google | `client_id`, `redirect_url` — **kein** Domain-Filter |
|
||||
| `9024c7a6…` | onetimepin | `redirect_url` |
|
||||
|
||||
Da **keiner** der IdPs eine Domain-/Tenant-Bindung trägt (live per
|
||||
`GET /accounts/{id}/access/identity_providers` geprüft), kann die Einschränkung nur aus der
|
||||
**Policy** kommen — und sie greift nachweislich. Ein Google-Test mit abweichender Adresse wurde
|
||||
abgelehnt ⇒ dieselbe Policy-Struktur bindet GitHub genauso.
|
||||
|
||||
⚠️ **Grenze der Aussage:** der GitHub-Pfad wurde **nicht** separat getestet (Google→GitHub ist
|
||||
geschlossen, nicht gemessen). Das ist der **einzige** verbleibende Grund, den Eintrag nicht als
|
||||
bewiesen sauber zu führen — nicht als Grund für eine Änderung.
|
||||
|
||||
#### Was bleibt (der einzige haltbare Rest)
|
||||
|
||||
Der interne Wildcard `*.emsenhuber.net` (`16aaec78…`) ist sauber — TP41 hat ihn auf Access-Groups
|
||||
umgestellt (`zt-humans` / `zt-home` / `zt-automation`). ✅ Kein `login_method` an
|
||||
`hass`/`grafana`/`portainer`/`pve`. **Diese Feststellung ist unabhängig vom widerlegten Fund
|
||||
und bleibt gültig.**
|
||||
|
||||
#### Gotchas (live bestätigt — bleiben wertvoll)
|
||||
- 🔴 **Access-App-IDs sind 32 Hex** — die Kurzform `16aaec78` liefert `12045 invalid_application_id`.
|
||||
Volle ID zuerst per `GET /accounts/{id}/access/apps` holen.
|
||||
- Writes nur via `CF_API_TOKEN`/curl (MCP ist read-only). Token am 2026-10-06 als `active` verifiziert.
|
||||
- 🔴 **Der `cloudflare`-MCP ist strikt read-only.** Write-Probe 2026-10-06: no-op-PUT (identischer
|
||||
Body) → **`1010: undefined`**. Writes nur via `CF_API_TOKEN`/curl.
|
||||
- Reusable Policy nur per **App-PUT** detachbar, nicht per `/policies`-DELETE.
|
||||
|
||||
#### Abgrenzung
|
||||
**Nicht** TP41 (hat genau diesen Wildcard bereits saniert), **nicht** TP44 (Dokumentation).
|
||||
⚠️ `420.teilzeitladen.xyz` gehört zum Projekt **blaueblüten** — Projektgrenze beachten.
|
||||
|
||||
**→ Abschluss, wenn der GitHub-Include entfernt und den beiden Personen der Zugang bestätigt ist.**
|
||||
**→ Geschlossen 2026-10-06: kein Fix. Kein Schreibzugriff auf die Terpenfinder-Policy erfolgt.
|
||||
Christoph-Entscheid, nachdem er die Prämisse selbst widerlegt hatte.**
|
||||
|
||||
Reference in New Issue
Block a user