TP41: T5-Anleitung (IdP-Callbacks) + TP30 Posten #7 (Terpene-Keystore-PW-Leak)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-01 19:20:52 +02:00
parent 012397f194
commit c543819a90
3 changed files with 47 additions and 1 deletions

View File

@@ -161,5 +161,6 @@ Sitzungstranskript geraten (Regex-Loch `_PW`). **Rotation erwägen** (Terpene-An
### Noch offen
- **d47435-Revoke** (User, Account API Tokens Write). **T3-Client-Verify** (User, WARP neu verbinden).
- **T5** (GitHub/Google-Callbacks — der eigentliche OTP-Fix, User). **T6/T7/dw-Geli**.
- **T5** (GitHub/Google-Callbacks — der eigentliche OTP-Fix, User) — **Schritt-für-Schritt:**
[`docs/tp41-t5-idp-callback-anleitung.md`](tp41-t5-idp-callback-anleitung.md). **T6/T7/dw-Geli**.
- 🔴 **`TERPENE_ANDROID_KEYSTORE_PW`-Rotation erwägen** (Transkript-Leak, s.o.).

View File

@@ -2169,6 +2169,7 @@ Umzug **nebeneinander**, ein zweiter AP am selben Punkt bringt nichts und stört
| 4 | **CF-Access-Service-Token** (`CF_API_TOKEN`) | Cloudflare-Zugang, s. TP14.4 | ⏳ **läuft am 2027-01-09 ohnehin ab** — harter Termin, unabhängig vom Projektende | Runbook liegt (`tp14.4-cf-access-token-runbook.md`) | Token neu ausstellen + `~/.secrets` nachziehen; **account-owned**, anderer verify-Endpoint |
| 5 | **Nautobot-Tokens** (`NAUTOBOT_SUPERUSER_API_TOKEN`, `NAUTOBOT_GITEA_TOKEN`) | Nautobot-Superuser + Gitea-Anbindung | 🔴 in der TP16.3-§2/§3-Session (2026-08-31) durch schwache `sed`-Maskierung **ins Transkript** geraten | Werte in `docs/nas-vlan20/stacks/210-nautobot.yml` (gitignored) | neu ausstellen + Stack-YML nachziehen; Superuser-Token wird von den `gc-*`-Skripten gelesen |
| 6 | **MariaDB `root`** (LXC 302, `10.40.20.23`) | root-DB-Login | 🔴 am 2026-09-01 (TP39) ins Transkript geraten — die `/root/.my.cnf` trug `password <wert>` **ohne `=`**, die Feld-Maskierung ankerte auf `=` und griff nicht | Wert in `/root/.my.cnf` (chmod 600) | `SET PASSWORD` + `.my.cnf` nachziehen; **kein** externer Konsument (Dienste nutzen eigene DB-User) ⇒ billigste Rotation der Liste |
| 7 | **`TERPENE_ANDROID_KEYSTORE_PW`** | Terpene-Android-TWA-Signing (`android/android.keystore`, alias `terpene`) | 🔴 am 2026-09-01 (TP41) durch **Regex-Suffix-Loch** (`_PW` nicht abgedeckt) ins Transkript geraten | Wert in `~/.secrets/credentials.env` + Keystore-Datei | **Store-/Key-Passwort** via `keytool -storepasswd`/`-keypasswd` ändern + `credentials.env` nachziehen; Konsument = Android-Build/Play-Signing (**Cross-Projekt blaueblüten**) — den **Key selbst NICHT** neu erzeugen |
> ✅ **Der Leak-MECHANISMUS hinter #1 ist seit 2026-08-31 zu — der Wert bleibt trotzdem verbrannt.**
> Alle sechs Skripte im Repo, die `sshpass -p <PW>` benutzten (`nautobot/gc-transaktion.py` und
@@ -2188,6 +2189,12 @@ Umzug **nebeneinander**, ein zweiter AP am selben Punkt bringt nichts und stört
> um sie zu sehen. #6 ist zugleich der **billigste** Posten (kein externer Konsument), aber die
> Panne dahinter ist der teure Teil.
>
> 🔴 **#7 ist die vierte Maskierungs-Panne derselben Klasse** (nach `SHELLY_DEVICE_PW` 08-28,
> Nautobot-Tokens 08-31, MariaDB-root 09-01): diesmal ein **Regex-Suffix-Loch** — das Muster
> `(TOKEN|PASS|PASSWORD|SECRET|KEY|CLIENT_ID)` deckte den Suffix `_PW` **nicht** ab, also blieb der
> Wert von `TERPENE_ANDROID_KEYSTORE_PW` beim maskierten Lesen stehen. **Dieselbe Merkregel, erweitert:**
> die Alternation muss `PW`/`PWD` mit enthalten (`…|PW|PWD|…`), sonst greift die Feld-Ersetzung nicht.
>
> ℹ️ **#3 war bis 2026-08-24 TP17.2** und ist jetzt vollständig hier (s. Detailabschnitt unten) —
> es benutzt denselben Geräte-Durchgang wie #2, **ein Reboot statt zwei**. #4 gehört sachlich zu
> **TP14.4**, das als TP bestehen bleibt (dort steckt das CF-Access-Profil, nicht nur der Token).

View File

@@ -0,0 +1,38 @@
# TP41 T5 — IdP-Callback-URLs reparieren (der Daily-OTP-Fix)
**Problem:** Nach dem Team-Domain-Rename `bf4` → `emsenhuber` kennen die OAuth-Apps bei GitHub/Google
die neue Callback-URL nicht. Login schlägt mit „redirect_uri is not associated with this application"
fehl → Cloudflare Access fällt auf **E-Mail-OTP** zurück (das tägliche Nervthema).
**Die EINE URL**, die bei beiden Providern hinterlegt sein muss:
`https://emsenhuber.cloudflareaccess.com/cdn-cgi/access/callback`
## GitHub (Client ID `Ov23li2h96hAkGRPJXYV`)
1. github.com → rechts oben aufs Profilbild → **Settings**.
2. Linke Spalte ganz unten **Developer settings** → **OAuth Apps**.
3. Die App mit Client ID `Ov23li2h96hAkGRPJXYV` öffnen.
4. **Authorization callback URL** = `https://emsenhuber.cloudflareaccess.com/cdn-cgi/access/callback`.
5. (Optional **Homepage URL** = `https://emsenhuber.cloudflareaccess.com`.)
6. **Update application** klicken.
## Google (Client ID `276709275903-b3q55lsj203v4strbhh5mub76cib867e.apps.googleusercontent.com`)
1. console.cloud.google.com → oben das richtige **Projekt** wählen.
2. **APIs & Services** → **Credentials**.
3. Unter **OAuth 2.0 Client IDs** den Client `276709275903-…apps.googleusercontent.com`
(Typ *Web application*) öffnen.
4. **Authorized redirect URIs** → **+ ADD URI** →
`https://emsenhuber.cloudflareaccess.com/cdn-cgi/access/callback`.
5. **Authorized JavaScript origins** → **+ ADD URI** → `https://emsenhuber.cloudflareaccess.com`.
6. **SAVE**. (Google-Propagation dauert teils ein paar Minuten.)
## Testen
1. Neues **privates** Browserfenster → eine Access-geschützte Seite öffnen.
2. Beim CF-Login **GitHub** bzw. **Google** wählen → muss ohne „redirect_uri"-Fehler durchlaufen,
**keine** OTP-Mail mehr.
3. Gegenprobe (optional, kann Claude read-only): CF-Audit
`GET /accounts/<acc>/access/logs/access_requests` → `identity_provider` = `github`/`google`
statt `onetimepin`.
## Hinweis
Die Team-Domain heißt `emsenhuber.cloudflareaccess.com` (das alte Org-Label `bf4…` in CF nicht
anfassen). Session gilt 720 h (30 Tage) — nach dem Fix sollte der Login also lange halten.