INCIDENT — dev@alai.no mailbox + plaintext kredencijali (2026-07-30)

INCIDENT — dev@alai.no mailbox + plaintext kredencijali (2026-07-30)

Status: OTVOREN — DJELOMIČNO SANIRAN, KRITIČAN PASSWORD-REUSE. Migadu i Google dev@alai.no kredencijali rotirani su 2026-08-01; ostaju provider rotacije sedam naloga sa ponovljenom lozinkom, Gmail app-password i Git-history cleanup. Vlasnik: John (AI Director). MC taskovi: #106589 (plaintext credentials), #106590 (dev IMAP outage), #106591 (Google alert 23.06), #106592 (OAuth verifikacija).

Sve u ovom dokumentu je tool-verifikovano tokom sesije 2026-07-30 (17:00–23:10 CEST). Ništa nije iz sjećanja.


Izvršni sažetak

  1. dev@alai.no IMAP autentikacija pada od 20:17:40 CEST — lozinka iz Vaultwardena koja je radila u 20:16:19 od tada je odbijena. Trezor nepromijenjen i sinhronizovan; CEO izričito NIJE mijenjao lozinku; pad traje ~3h (isključuje tipični rate-limit). Radna hipoteza: lozinka/stanje naloga promijenjeno na Migadu strani — mogući kompromis naloga.
  2. Google security alert od 23.06 na istom sandučiću: "Someone just used your password to try to sign in — Google blocked them." Prijava s tačnom lozinkom, blokirana. 37 dana neobrađeno, ništa rotirano. U kombinaciji s (1) — tretirati kao vjerovatan kompromis.
  3. Plaintext mail kredencijali van trezora, tracked u gitu i push-ovani na GitHub remote (alai-system, privatan): config/email-accounts.json (bio world-readable ~3,7 mjeseca), config/mail-credentials-dev.json, plus kompletan bw export s lozinkama u evidence/105489/bw-lumiscare-search.json. Kopije u 3 worktreea.
  4. Google OAuth verifikacija (snowit-seo-portal) mrtva 43 dana — MC #103811 zatvoren kao done 17.06, a odgovor Googleu nikad nije poslan (dokazano živim IMAP pregledom svih Sent foldera).
  5. Sistemski uzrok nevidljivosti: inbox-watcher triage ne pomjera status (poznat kvar, BookStack "Mail Pipeline E2E Debug MC #105892") — 528 poruka new / 0 triaged u 14 dana. Google alert je 37 dana ležao u redu koji niko ne prazni.

Timeline 2026-07-30 (CEST; svi unosi tool-verifikovani)

vrijeme događaj izvor
20:08:24 daemon: dev fetch OK email-agent-launchd.log:25868
20:14:31 daemon: Connected to dev (dev@alai.no) log:25907
20:16:19 John test: IMAP OK + SMTP OK (baseline) mail-native test
20:17:40 John test: 1 NO Authentication failed mail-native test
20:19:42 dev pada; alem/john/gmail OK u istoj sekundi mail-native test ×4
20:20–20:27 daemon: IMAP error (dev): Command failed ×3 log:25947,25957,25996
20:25:08 bw sync odrađen — bez efekta bw status lastSync
20:28:30 i dalje pada (11 min pauze) mail-native test
21:02–21:08 daemon: socket timeout / command failed log:27075–27115
23:08:34 i dalje pada — ~2h51min od početka mail-native test

Šta je dokazano / isključeno

Sljedeći korak koji sve razlučuje (CEO, ruke)

Migadu admin panel → dev@alai.no → datum zadnje promjene lozinke + log prijava/blokada.

NE raditi: dalje login pokušaje na dev@alai.no (produžavaju blokadu ako je rate-limit).


Google security alert 23.06 (MC #106591)

Plaintext kredencijali (MC #106589)

fajl stanje 30.07 prije fixa poslije fixa
~/system/config/email-accounts.json -rw-r--r-- (world-readable), 457 B, od 08.04 600
~/system/config/mail-credentials-dev.json 600, 204 B, od 22.02 600
~/system/evidence/105489/bw-lumiscare-search.json -rw-r--r--, puni bw export, login.password plaintext, 2 stavke 600
kopije u worktreeovima flowforge-105961, flowforge-105761, codecraft-106322 -rw-r--r-- sve 600

OAuth verifikacija snowit-seo-portal (MC #106592)

Sistemske lekcije (za buduće sesije)

  1. status=new u email-inbox.db ne znači "nepročitano" — fetcher markira SEEN na serveru; new znači "neobrađeno kod nas". Živo unread na IMAP = 0, a u bazi 110 new.
  2. Triage daemon je i dalje mrtav (poznat kvar iz MC #105892) — kritični alarmi leže u new redu mjesecima. Dok se ne popravi: sigurnosne alerte tražiti eksplicitno po pošiljaocu, ne oslanjati se na triage.
  3. MC done bez ishodnog dokaza je laž u trackeru — #103811 zatvoren na osnovu drafta. Slanje maila dokazuje samo Sent folder (živi IMAP), ne mail-baza status.
  4. Negativna tvrdnja ("kredencijala nema van trezora") zahtijeva enumeraciju diska, ne čitanje jednog alata. John je 30.07 tvrdio suprotno dok CEO nije insistirao — grep je našao 11 fajlova.
  5. git check-ignore bez --no-index preskače tracked fajlove — lažni negativ pri verifikaciji .gitignore izmjena.
  6. IMAP probe disciplina: ne bombardovati jedan nalog uzastopnim loginima; Migadu ima brute-force zaštitu, a NO Authentication failed ne razlikuje pogrešnu lozinku od blokade.

AŽURIRANJE 2026-07-31 — CEO tvrdnja potvrđena, fix shipped (MC #106589)

CEO je insistirao: "mail reader nije koristio BW". Tačno — za kanonski MCP put.

Četvrta lokacija plaintext kredencijala (nijedan raniji sken je nije našao jer je van ~/system): ~/.config/alai/email-accounts.json (523 B, 29.06, prava 600) — sadrži dev@alai.no, alem, john, info. email-mcp-launch.sh (Securion B7, MC #104502) je predviđao macOS keychain kao primarni izvor, ali keychain stavka alai-email-accounts nikad nije kreirana — plaintext fallback je bio jedini stvarni put. Dakle: CLI (mail-native.js) i fetch daemon (email-agent.js) su koristili BW; kanonski MCP bridge (email-mcp-bridge-v2.js) je koristio plaintext + mrtve one.com hostove (pre-Migadu default).

Fix (shipped + živo verifikovan):

Napomena o uzroku dev pada: bridge NIJE okidač #106590 — nije startovao između 17:23 i 23:00 CEST (pad počeo 20:17), i spaja se na IMAP tek na tool-poziv. Uzrok pada i dalje nerazriješen; presuda je u Migadu adminu.

Ostaje (CEO ruke): inventar + rotacija sadržaja 3 plaintext fajla; git rm --cached + odluka o scrubu historije; brisanje fajlova NAKON rotacije.

AŽURIRANJE 2026-08-01 — provider rotacija i dev oporavak

Evidence: /Users/makinja/system/evidence/106589/provider-rotation-20260801T053700Z/ (mode 0600 za osjetljive izvještaje/screenshotove).

Referencirani izvori


Revision #5
Created 2026-07-30 21:16:50 UTC by John
Updated 2026-08-01 07:41:47 UTC by John