# Cascades Tucson — Post-DMARC spoofing recheck + yq install (Howard) ## User - **User:** Howard Enos (howard) - **Machine:** Howard-Home - **Role:** tech ## Session - **Date:** 2026-04-21 (UTC) - **Scope:** Verify tooling health on Howard-Home, verify Mike's DMARC fix is working for Cascades, clean up two missed phishes, then hand off for Intune Phase B-1 --- ## Note for Mike ### Good news Your `_dmarc.cascadestucson.com` change from `p=none` to `p=quarantine; pct=100` is working. Between your 16:34Z sweep yesterday and 20:22Z today, **zero new signature-matching spoofs were delivered**. Two phishes landed after your sweep but before DNS propagation (both show `dmarc=fail action=none` in their headers — DMARC was still observational at delivery). Since the change propagated: nothing. 26-hour clean window. ### Two stragglers I cleaned up Your 4/20 sweep targeted 7 mailboxes; these two weren't on that list but got hit with same-campaign messages you'd have deleted if you'd seen them: | Mailbox | When (UTC) | Subject | Origin | Outcome | |---|---|---|---|---| | `accounting@` | 4/20 13:41Z | Action Required: Service Termination Alert | 104.168.70.29 (ColoCrossing US, `LANG:zh-cn`) | **Permanently deleted** from Inbox, HTTP 204 | | `jd.martin@` | 4/20 18:28Z | NSA: Cascadestucson Executed NDA Agreement | 178.211.155.48 (Deltahost DE, `LANG:en`) | **Permanently deleted** from Deleted Items, HTTP 204 | Both were envelope-spoofed as the recipient themselves, both credential/document-bait phishes from the same operator as yesterday (new IPs but same hoster patterns — ColoCrossing + Deltahost). JD's was already user-deleted before I got to it; accounting@ was still in the Inbox. ### User advisory — please mention when you talk to them - **accounting@** (whoever checks that shared mailbox — likely Mary Hogan-Padilla): "On 4/20 around 6:41 AM local you got a fake Microsoft password-expiry email. Did anyone click the link? Need to know so we can decide whether to reset creds." - **JD Martin**: "The DocuSign/NDA email on 4/20 at 11:28 AM local was a phish. Confirm you didn't click through or enter any credentials." ### IP blocking — skipped You recommended TABL additions for the 4 IPs yesterday. I added the two new IPs (104.168.70.29, 178.211.155.48) to my report but **did NOT add them to TABL** — since DMARC enforcement is working, the additive blocks are redundant. If we see another wave that slips past DMARC, that's the signal to add them. ### DMARC aggregate reports Still routing to `info@cascadestucson.com` (internal mailbox, no one parsing). Flagged in my morning spoofing-hunt report as the highest-leverage remaining fix. I didn't touch this. Consider pointing `rua` at dmarcian or EasyDMARC (free tiers) so we can see who's spoofing cascadestucson.com in the wild + confirm enforcement empirically. ### `p=reject` readiness Once we have a week of aggregator data showing no legit senders are quarantined in error, you can bump from `p=quarantine` to `p=reject`. Don't do this blind — the risk is silently breaking a forwarding chain or vendor mail. Aggregator-first, then escalate. --- ## Tooling fixes this session ### Howard-Home state at start - Ollama local: running (qwen3-coder:30b, nomic-embed-text) - Ollama Tailscale: running (codestral:22b, qwen3:14b) - GrepAI watcher: running, indexed 1,978 files / 13,473 chunks / 85.3 MB, steady - Vault: `D:/vault` present, sops binary present, age keys present ### Problem found: `vault.sh` broken because `yq` missing `bash D:/vault/scripts/vault.sh get-field ...` was emitting: ``` [ERROR] Neither yq nor Python is available for YAML parsing. Install yq or ensure python + yaml-query.py are present. ``` `vault.sh` looks for `yq` first, then a Python fallback via `$SCRIPT_DIR/yaml-query.py`. Neither existed on Howard-Home. ### Fix applied: installed yq v4.53.2 via winget ``` winget install MikeFarah.yq ``` Installed to `C:\Users\Howard\AppData\Local\Microsoft\WinGet\Links\yq.exe`. Verified: `vault.sh get-field` now returns clean values. ### Gap: Python fallback script still missing everywhere `vault.sh:17,39,49` references `$SCRIPT_DIR/yaml-query.py` but that file doesn't exist in `D:/vault/scripts/` (or anywhere in the vault repo). The fallback path Mike coded for (WDAC / policy-restricted machines) is documented but missing its implementation. Not urgent since yq works on Howard-Home and presumably on DESKTOP-0O8A1RL, but worth committing a `yaml-query.py` helper so the fallback actually fires if yq is blocked on a future machine. --- ## Also done this session - `/sync` at session start — pulled 4 commits from Mike (MacBook-Air): Syncro API corrections, GuruRMM MSI deploy fix, BirthBiologic onboarding, desertrat.com Mailprotector SBR repair. Nothing Cascades-related. - Report written: `reports/2026-04-21-post-dmarc-spoofing-recheck.md` (full methodology + headers + delete log) - Sweep script kept at `C:/tmp-scripts/cascades_scan.sh` for future rechecks (reusable against any domain with `cascadestucson.com` → variable) ## Data artifacts - `/tmp/cascades_recheck/` — users list, hits.jsonl, per-hit headers, delete log - `/tmp/cascades_recheck/delete_log/20260421T203252Z_deletions.jsonl` — structured record of the 2 HTTP 204 permanentDelete calls ## What's next (picking up from 4/20 session) **Intune Phase B-1: Android compliance policy.** See `docs/intune-b1-android-compliance-walkthrough.md` (new this session). Howard-Home executes via admin center this session.