Commit Graph
100 Commits
Author SHA1 Message Date
bzuccaro 2ef07a28fc feat(reliability): PSK uplink security-mode fallback chain (sae-mixed/sae/psk2 with PMF) 2026-08-23 08:19:20 -06:00
bzuccaro 501fa455ce fix(reliability): resolve STA netdev by phy membership (netifd ignores ifname); sae-mixed for PSK uplinks 2026-08-22 20:37:11 -06:00
bzuccaro 132cf4d77a fix(reliability): explicit hop baseline restore, immune to stale pager snapshot 2026-08-22 19:37:57 -06:00
bzuccaro 712d381093 fix(reliability): supervisor restores hop baseline unless a role holds the pause 2026-08-22 19:31:15 -06:00
bzuccaro 107cf17611 fix(ui): sync role select to live role; mark RF chip unavailable on poll failure 2026-08-22 19:26:39 -06:00
bzuccaro a1b449c9be fix(deploy): busybox ash lacks SECONDS; use date +%s for health deadline 2026-08-22 19:23:51 -06:00
bzuccaro 6b84665347 fix(deploy): no dangling symlink on first-deploy failure, deadline-capped health poll, release pruning, honest commit rc 2026-08-22 19:18:42 -06:00
bzuccaro 92a2a6d8ee docs: field runbook — checklists, engagement flow, recovery procedures 2026-08-22 19:11:04 -06:00
bzuccaro 55d4beb9d4 fix(reliability): probe section existence via uci show, not an option key 2026-08-22 18:59:57 -06:00
bzuccaro 1133068a09 fix(reliability): recreate missing pineapd section; honest uci-set reporting 2026-08-22 18:45:44 -06:00
bzuccaro 23ca901e82 feat(reliability): supervisor continuously enforces known-good UCI set 2026-08-22 18:37:22 -06:00
bzuccaro b9a64c6560 fix(reliability): supervisor re-parks stock-resurrected dummy STA on interval 2026-08-22 18:31:06 -06:00
bzuccaro 5625310977 fix(reliability): converge runtime after profile restore (park dummy STA, re-raise monitors) 2026-08-22 18:26:21 -06:00
bzuccaro 61c929d891 docs: reliability core subsystem guide (v1.4.0) 2026-08-22 18:17:27 -06:00
bzuccaro 60db235f0b fix(reliability): converge runtime on uplink revert; bound health endpoint cost (I3,I4) 2026-08-22 16:52:29 -06:00
bzuccaro b25c98b7c7 fix(reliability): hop governance belongs to rfplan, not boot reconciler (I2) 2026-08-22 16:51:52 -06:00
bzuccaro ba3e1b1ae0 fix(reliability): clear boot marker on graceful shutdown (I1) 2026-08-22 16:51:33 -06:00
bzuccaro 027646c905 fix(reliability): pool size counts any whitespace; deploy ZIP var remote-expands 2026-08-22 16:23:50 -06:00
bzuccaro eae47d99bf fix(reliability): encode str stdin in device_run; smoke drill path fixes + regression tests 2026-08-22 16:23:50 -06:00
bzuccaro d954b6e90d fix(smoke): conditional role drill, healthy-gate for drills, exit reaping 2026-08-22 16:01:32 -06:00
bzuccaro 25bae3b4a2 test(smoke): on-device reliability suite 2026-08-22 15:51:05 -06:00
bzuccaro 63528ff794 fix(deploy): unauth health poll, validate-before-gate, fullmatch names, reload-only-on-ok 2026-08-22 15:41:37 -06:00
bzuccaro 1bb15de258 feat(deploy): reliability API routes, atomic releases, version single-source 2026-08-22 15:20:39 -06:00
bzuccaro aba08e36c7 fix(ui): guard chip shows pending count, not raw list 2026-08-22 15:03:15 -06:00
bzuccaro 4c1144ab32 feat(ui): reliability panel events/counters, RF plan chip and controls 2026-08-22 14:55:49 -06:00
bzuccaro bace45d6e4 fix(reliability): rfplan review fixes — cli commit, assoc poll, ensure_attack wiring, idle reload 2026-08-22 14:35:12 -06:00
bzuccaro 15cd3c5eb8 feat(reliability): phy1 RF role manager with uplink-on-radio1 2026-08-22 14:20:05 -06:00
bzuccaro 78aab64af0 fix(reliability): watchdog max lifetime + serialized gate entry (review fixes) 2026-08-22 14:08:25 -06:00
bzuccaro a008bb9167 feat(reliability): risky-op preflight snapshots + detached rollback watchdog 2026-08-22 13:56:25 -06:00
bzuccaro 7a27218149 feat(reliability): supervisor sampling, event feed, boot marker 2026-08-22 13:41:49 -06:00
bzuccaro e329fd2a1c docs(plan): watchdog probe uses monitor presence, not stock-disabled wlan0mgmt 2026-08-22 13:27:33 -06:00
bzuccaro 7d1eb62d75 feat(reliability): START=49 boot guard installed by deploy 2026-08-22 13:26:09 -06:00
bzuccaro a05754f908 feat(reliability): boot-time UCI reconciler 2026-08-22 13:12:14 -06:00
bzuccaro 88e6471820 feat(reliability): UCI profile snapshot store 2026-08-22 13:00:59 -06:00
bzuccaro 1d17704f72 fix(reliability): journal fail-safe serialization, per-line parse, review hardening 2026-08-22 12:51:22 -06:00
bzuccaro 496f7c58e3 feat(reliability): JSONL event journal with rotation and counters 2026-08-22 12:39:19 -06:00
bzuccaro 2c24107f42 docs: plan — reliability core implementation 2026-08-22 11:59:16 -06:00
bzuccaro 4b03ecb1fd docs: spec — reliability core + integrated supervisor 2026-08-22 09:52:25 -06:00
bzuccaro 86d26d8457 fix: show BSSID and sources in recon association tooltip 2026-08-21 08:46:19 -05:00
bzuccaro 883a839692 test: cover recon identity associations 2026-08-21 08:41:17 -05:00
bzuccaro cd54402892 feat: show recon client identities and associations 2026-08-21 08:40:25 -05:00
bzuccaro 21e308386f feat: include recon identity in exports 2026-08-21 08:31:47 -05:00
bzuccaro a67faecee9 feat: associate recon clients with confirmed networks 2026-08-21 08:26:58 -05:00
bzuccaro 2c9fa8d137 fix: use live macchanger OUI path 2026-08-21 08:20:09 -05:00
bzuccaro 797db1816a feat: resolve recon device manufacturers locally 2026-08-21 08:15:21 -05:00
bzuccaro d149cb13fd docs: plan recon identity enrichment 2026-08-21 08:10:03 -05:00
bzuccaro 922c3ec4ae docs: design recon identity enrichment 2026-08-21 08:06:02 -05:00
bzuccaro 377cc83060 docs: plan recon and PineAP reliability work 2026-08-20 16:25:42 -05:00
bzuccaro 00cbc52254 docs: design recon and PineAP reliability improvements 2026-08-20 16:23:26 -05:00
bzuccaroandCursor 7d48b7ad06 fix: harden UI actions and daemon calls for reliable control (v1.3.2)
Retry and serialize pineapd/hak5 calls, queue virtual-pager keys, and grey out buttons until the pager finishes. Deploy now installs python3-light after factory firmware. Bump version to 1.3.2.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 15:49:10 -05:00
bzuccaroandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> cd26553d21 fix: non-disruptive startup checks + clean service lifecycle (v1.3.1)
- Env check is read-only when state is sane: no pineapd command-socket
  writes, no live pool-list commits, no wifi reload; pineapd restarts only
  when a runtime-sensitive UCI value changed or the daemon was down
- Failed monitor repairs now fail the startup contract instead of being
  reported as fixed; runtime pool state is read from active config
- Enterprise AP recovery runs only on device boot (PAGER_WEBUI_BOOT), not
  on every web-service restart
- serve() gates the HTTP port on startup checks with bounded retries and
  shuts down cleanly on SIGTERM/SIGINT; the recon watchdog waits
  interruptibly
- Recon uses a bounded userspace channel scheduler that drives both
  monitor radios over non-DFS channels, with preflight verification,
  serialized starts, and per-cycle error reporting
- payload.sh waits for real readiness on start, fully removes the boot
  service (stop + disable + delete) on stop, and surfaces a
  stopped-but-enabled boot service; deploy.sh refreshes the installed
  init script even when the service is stopped
- Bump version to 1.3.1

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-19 12:03:11 -05:00
bzuccaro 6e3968c19a fix: non-disruptive env check — drop wifi reload + misleading hop warning
- STA uplink disable now uses uci commit + ip link set wlan0 down instead of
  wifi reload, so the env check never bounces radios/APs/drops monitors
- Removed the wlan0mon 'hop is off' warning: field-verified hop=0 is normal
  (wlan1mon also reports 0 while scanning both bands); the STA/AP pinning
  checks are the real signals
- recon/status drops wlan0_hopping; UI keeps wlan0_sta + wlan0_pinned pills
2026-08-19 10:55:26 -05:00
bzuccaro 5a72566381 feat: env check auto-disables dummy_radio0 STA (2.4GHz recon root cause)
The stock STA client interface (wlan0) holds phy0's channel, pinning wlan0mon
so 2.4GHz recon captures nothing (verified: iw set channel -> Resource busy
until wlan0 is down). env_check now disables it (uci wireless.dummy_radio0
disabled=1 + wifi reload) at startup and /api/recon/status exposes wlan0_sta
so the recon page can warn if it regresses.
2026-08-19 10:42:26 -05:00
bzuccaro 5eb81b90f1 fix: recon env-check verifies runtime wlan0mon hopping (2.4GHz starvation)
The band UCI config looked correct but pineapd was not hopping wlan0mon at
runtime, so 2.4GHz recon results were entirely absent. env_check now parses
_pineap INTERFACE LIST and warns when wlan0mon hop is off; /api/recon/status
exposes wlan0_hopping and the recon scan bar surfaces it.
2026-08-19 10:29:50 -05:00
bzuccaro 904843307e feat: startup environment check + self-heal (v1.3)
- env_check(): verifies daemon/pineapd/UCI/monitors/recon DB, auto-fixes
  fixable issues and re-verifies; forces runtime SSID-pool broadcast off to
  match the UI (kills the 'pool on but UI shows off' gap)
- server.py --env-check CLI; payload.sh runs it verbosely before starting,
  aborts on core failure
- serve() runs the check at every startup (boot + procd respawn)
- /api/health exposes env report + pool_runtime; /api/recon/status exposes
  wlan0_pinned (2.4GHz under-sampling warning); recon page warns when a
  radio0 AP pins wlan0mon
- recon start failures now include the daemon reason in the UI error
- shared stabilization refactor (_stabilize_uci/PINEAPD_SAFE_UCI/_raise_monitors)
- tests: test_env_check.py (18) + health/recon updates
2026-08-19 10:25:02 -05:00
bzuccaro 37b5e821dd docs: spec — startup environment check + self-heal 2026-08-19 10:20:20 -05:00
bzuccaro 52f9f6ecd5 chore: bump version to 1.2; scrub personal details from docs
- Version 1.1 -> 1.2 in the hak5 manifest and MCP serverInfo.
- Removed leaked personal details from process docs: device root password,
  the user's personal iPhone SSID (authorized-test target), the local
  /Users/... checkout path, and the device IP where it appeared alongside
  the password. Replaced with <device-password>, <authorized-test-ssid>,
  <repo>, and <device-ip> placeholders.
2026-08-19 08:21:28 -05:00
bzuccaro 32282af1d8 ui: wireless landscape card — ring + legend, fix handshake toggle wrap
- Landscape card mirrors Encryption: headline text removed; square 112px
  ring (drawn height 112, CSS fixed square, no more ellipse) + HTML legend
  (dot + label + count) for Access Points / Clients / Unassociated. The
  canvas previously had no legend and the '90' headline never matched the
  dominant arc; the legend makes every count visible and labeled.
- Legend markup generalized: .recon-enc-* -> .recon-chart-* shared by both
  cards; shared chartLegendEntry() builder; landscape skips zero slices.
- .recon-toggle now flex-wraps (was overflowing 'Auto-collect handshakes'
  past the card edge at narrow widths; card min-width inner is ~142px vs a
  233px label).

Verified on device via CDP at 1200px and 860px viewports: landscape ring
112x112 square with Access Points 92 / Clients 291 / Unassociated 760;
encryption card intact; toggle label stays inside the 184px card (wraps to
2 lines, no card overflow); zero JS exceptions.
2026-08-19 08:07:46 -05:00
bzuccaro 6927baf51f fix: encryption ring renders as a true circle, not a squashed ellipse
The enc canvas was drawn at 233x120 internally but .recon-chart-box canvas
forced width:100%/height:100% onto a ~233x115 box, scaling the bitmap and
flattening the ring. #recon-encryption is now a static 112px square with the
doughnut drawn at height 112, so internal and CSS pixels match (1:1) and the
circle stays circular. Verified on device: box and bitmap both 112x112,
card fits without overflow, legend intact, no JS exceptions.
2026-08-19 07:34:09 -05:00
bzuccaro aaa148fb30 docs: spec — correct encryption card bucket model (real families + legend id) 2026-08-19 07:24:09 -05:00
bzuccaro 8befe45de5 fix: encryption landscape card — real family buckets + legend id
- Ring and legend now derive from reconEncBucket's actual family keys
  (WPA2-PSK, WPA3-Personal, WPA2-Enterprise, ...) instead of the six
  nominal buckets that never matched encCounts, so the ring drew an
  empty ring and the legend was always blank on WPA2-dominated data.
  Ordering via RECON_ENC_ORDER; colors cycle RECON_ENC_COLORS.
- Legend div had class but no id while drawCharts looked it up with
  getElementById — the population block silently never ran. Added the id.

Verified on device via CDP: legend lists Open 9, WEP 1, WPA2-PSK 44,
WPA3-Personal 20, WPA3-Enterprise 5 with per-family dot colors; no JS
exceptions.
2026-08-19 07:24:00 -05:00
bzuccaro 53e995d5a7 ui: encryption landscape card — ring + HTML legend with counts 2026-08-19 06:53:35 -05:00
bzuccaro 66a62ce234 docs: implementation plan — encryption landscape card ring + key redesign 2026-08-19 06:52:49 -05:00
bzuccaro 8bd560f8e9 docs: spec — Encryption Landscape card ring + key redesign 2026-08-19 06:51:06 -05:00
bzuccaro 13ca4bd9cb ui: recon card order — Channel Map above Access Points, Compare APs below 2026-08-19 06:33:35 -05:00
bzuccaro 0ecd8c3135 hardening: 20s client timeout on API GETs
A hung read can no longer stall the recon/pineap poll loops (AbortController).
Writes keep no client abort: radio deploys legitimately take up to 45s
server-side. Cache-bumped api.js.
2026-08-19 00:13:03 -05:00
bzuccaro 1be93bc24b fix: MCP pineap.set_filter supports delete/clear/allow_all
The tool only accepted set_mode/add, so entries added via MCP could never be
removed. Now passes the full action set through to the same endpoint the UI
uses and returns the resulting mode/entries. Verified on device: add ->
delete round trip leaves the filter empty.
2026-08-19 00:07:08 -05:00
bzuccaro f6b4cadc39 fix: client kick/deauth use full bssid/target/channel deauth form
hak5cmd on this firmware has no CLIENT_KICK command and PINEAPPLE_DEAUTH_CLIENT
requires (bssid, target, channel) — the UI kick/deauth buttons and the MCP
pineap.kick_client tool previously passed only the client MAC, which printed
usage and silently did nothing.

- _deauth_target/_deauth_client_via_iface resolve the client's association
  interface via iwinfo (Access Point + Channel), pick the band-aware inject
  interface, and issue DEAUTH_CLIENT <bssid> <mac> <channel>
- h_client_kick: deny-filter (persistent) + immediate deauth with rc checks
- h_deauth_client: deauth with the full form; 502 with detail when the
  client is not associated
- MCP pineap.kick_client: resolves the client first (no side effects on
  failure), then deny-filter + deauth; verified on device (clean error for
  unassociated clients, filter list restored)
- tests updated for the new command chain
2026-08-19 00:05:42 -05:00
bzuccaro d7ef0624f4 ui: recon card redesign, channel-map hover, Send to PineAP prefill, recon hardening
- Top 5 recon cards restyled as stat cards: value + sub-line + mini chart,
  consistent 190px anatomy; Handshakes links to the handshakes page;
  Previous Scans shows count/latest plus a compact picker + action row
- Channel map records lobe geometry (canvas.__reconLobes / __reconLobesHit);
  hovering lists the networks under the cursor, click pins the tooltip,
  mouseleave hides it; empty states hide the tooltip too
- Recon focus sidebar gains 'Send to PineAP — Twin this network': routes to
  Evil WPA (psk2/sae/owe from recon encryption) or OpenAP (with BSSID) and
  prefills the form; one-shot PineAPPrefill is consumed by the attack
  launcher and never auto-deploys or leaks into manual forms
- Existing Actions verified end-to-end and hardened: capture/stop handshake
  sync the auto-collect toggle, examine buttons disable while pending
- Recon resilience: loadDetail retries after failed render or 503 (no more
  permanently blank page), scan-list errors surface in the scan bar, poll
  guard prevents overlapping loads, chart draws are individually isolated
- Auto-collect toggle re-syncs from get_config on the slow poll so the UI
  tracks the pager's own settings
2026-08-18 23:49:49 -05:00
bzuccaro 84ce19b2b3 ui: PineAP tabs order OpenAP before Evil WPA; rename Evil Open to OpenAP 2026-08-18 22:44:13 -05:00
bzuccaro c9a89f1303 ui: drop PineAP dashboard attack infobox 2026-08-18 22:42:49 -05:00
bzuccaro 71fcbf1168 ui: PineAP rail icon uses the wifi symbol 2026-08-18 22:41:39 -05:00
bzuccaro 9ce4f5dc8e ui: restore flat top-level rail (drop nested PineAP sub-entries) 2026-08-18 22:40:26 -05:00
bzuccaro 2044f08f1e test: delete-all-scans endpoint coverage 2026-08-18 22:37:42 -05:00
bzuccaro e93359fb69 feat: merge attacks into PineAP menu; auto channel; recon fixes; richer reports
- Rail: Attacks tab removed; PineAP becomes a grouped menu (Evil WPA /
  Evil Open / Evil Enterprise / Impersonation / Clients / Filtering);
  old #/attacks* hashes redirect to their PineAP equivalents.
- PineAP tabs gain Evil Enterprise; stock Open AP / Evil WPA / Enterprise
  pages replaced by the verified one-click launchers (status, capture,
  export, deauth, playbooks).
- Channel selects gain an Auto option: deploy resolves the target SSID's
  last-seen channel from recon.db (verified unit-tested end to end).
- Harness: pi.dev prompt section removed; Copy Token inline; robot icon.
- Recon: compare checkboxes no longer hide the AP list (multi-select
  stays visible, rows highlighted, clients table no longer suppressed);
  Previous Scans buttons moved above the dropdown with a Delete All;
  encryption chips + buckets now distinguish WPA2/WPA3 PSK vs Enterprise
  (AKM suites decoded from recon bitfield bits 32-47); scan JSON carries
  GPS when a fix exists; Reports tab shows a GPS column.
- fix: restore top-level EVIL_ENC definition lost in the repo (deployed
  build had it; repo would have thrown at init).
2026-08-18 22:35:51 -05:00
bzuccaro 72f6a68897 feat: capture field findings into bundled skills (harness resources)
pineapple-control gains the uplink-pins-phy0 constraint, the five-part
pineapd crash stack, and the standalone PineAPE engine recipe; wifi-deauth
gains the field-verified passive-capture finding (clients that refuse the
evil twin still produce crackable 4-ways of the real AP, [B,1,2,3,4]).
Evil WPA playbook hint mentions the passive fallback. Skills are served to
agents via MCP resources.
2026-08-18 22:17:29 -05:00
bzuccaro 6a56db3fef feat: dashboard strip HS source consistency + PineAP→Attacks cross-link banner 2026-08-18 21:48:58 -05:00
bzuccaro 2d8ece9f3a chore: cache-bust views.js 2026-08-18 21:47:10 -05:00
bzuccaro e1eba04775 feat: attacks workflow — playbook steps + auto-targeting deauth panel
Evil WPA/Open pages now show a state-aware playbook (current step
highlighted, contextual hint) and the Deauth Targeting panel
auto-fills the live attack SSID and refreshes clients automatically.
Enterprise page gains a playbook hint card.
2026-08-18 21:43:05 -05:00
bzuccaro 41b3c849ee chore: cache-bust index.html for views/app 2026-08-18 21:39:08 -05:00
bzuccaro 152178ce82 feat: live event notifications + dashboard status strip
The notification bell now receives event-driven alerts: new handshake
captures, new enterprise credentials, pineapd down/recovery and monitor
drops (15s poll, diffs against last-seen state). Dashboard gains an
Attacks / PineAPd / Recon live status row.
2026-08-18 21:39:02 -05:00
bzuccaro 1327bec03c test: reset monitor_fixes counter between health tests 2026-08-18 21:34:11 -05:00
bzuccaro 1d807a1fcf fix: health check repairs dropped monitors even when pineapd is healthy
wifi reloads during attack deploy/stop drop the monitor interfaces and
pineapd only recovers its primary; the monitor now brings both up
whenever it finds them down, with or without a pineapd failure.
2026-08-18 21:33:11 -05:00
bzuccaro 1d836f57c6 docs: stability notes — pineapd crash sources + fixes on Pager 24.10.1 2026-08-18 21:32:34 -05:00
bzuccaro ce1f6a8442 fix: passive health check + hop=0 in stabilization pass
Active PINGs on pineapd's command socket collided with the stock daemon's
own socket writes ('[PineAp] Error writing'), making the daemon watchdog
SIGTERM pineapd every ~30s while hopping. Monitor now checks pidof only
(no socket writes) and the stabilization pass pins wlan1mon hop=0.
2026-08-18 21:05:39 -05:00
bzuccaro 4c5b459f72 test: uci delete support in health test fake 2026-08-18 20:47:54 -05:00
bzuccaro b5d9ed39ff fix: health monitor stabilization pass for all pineapd crash sources
Field-verified crash stack on this firmware: SSID-pool broadcast (segfault),
wlan2mon hopping a nonexistent 6GHz iface (segfault), wlan1mon fast-hopping
6GHz channels (ASIO thread exit), and a large refilled pool. The fix path
now enforces: pool broadcast off, pool list cleared, wlan2mon off, wlan1mon
5GHz-only, wlan0mon 2.4GHz-only — idempotent, so collect refills self-heal.
8-minute continuous-PONG stability verified on-device.
2026-08-18 20:47:43 -05:00
bzuccaro c91d970a41 test: cover wlan2mon crash-source fix in health monitor 2026-08-18 20:26:29 -05:00
bzuccaro adfe8f784f fix: health monitor detects down monitors via ip link flags + disables wlan2mon
operstate reports 'unknown' on monitors (normal), so _iface_up now parses
admin flags from ip link. Discovered a second pineapd SIGSEGV source: the
wlan2mon 6GHz monitor this hardware never creates, hopping on the missing
iface (~85s crash cadence even with the SSID pool off). The monitor now
disables it in the fix path.
2026-08-18 20:26:16 -05:00
bzuccaro 4ce19693d1 fix: health chip API_BASE scope (use App.apiBase) 2026-08-18 20:19:05 -05:00
bzuccaro d10fba9d1b fix: never re-enable SSID pool broadcast (crash guard) + top-bar health chip
Mode 'active' and the advertise toggle could re-enable the SSID-pool
broadcast that segfaults pineapd. active preset now skips ssidpool/enable
(advertise stays false), the advertise endpoint refuses with an
explanation when the pool is disabled, get_ap reports the real pool
state, and the PineAP overview disables the toggle with a notice. Added
a top-bar health chip (PINEAP OK / POOL OFF / PINEAPD DOWN) polled every
15s.
2026-08-18 20:16:41 -05:00
bzuccaro 0cd9956c4c fix: attacksShell appends content box to root (detached-div bug) + cache-bust
The Attacks shell created its content div but never attached it to the
document, so all launcher cards rendered into a detached subtree (tabs
only were visible). Bumped views.js cache version in index.html.
2026-08-18 20:11:30 -05:00
bzuccaro d5506e2aaf fix: 45s verification window for daemon-applied APs (reload cycle) 2026-08-18 20:03:07 -05:00
bzuccaro e871e49466 feat: local MCP harness (tools/resources/prompts) + Harness UI page
Streamable-HTTP MCP server on POST /mcp: device.state, attack.deploy/stop/
status/deauth/capture/export_hc22000, loot.handshakes/enterprise_creds,
recon.aps/isearch/devices, pineap.kick_client/set_filter tools; recon DB +
bundled opencode skills resources; attack playbook prompts. Cookie or Bearer
auth. Harness page shows endpoint, token, curl snippet, capability explorer
and a copy-paste pi.dev prompt. scripts/harness_stdio.py for stdio-only
agents.
2026-08-18 20:00:13 -05:00
bzuccaro f31b38d1fa feat: enterprise deploy retry loop + karma filters (deny=allow-all) 2026-08-18 19:58:01 -05:00
bzuccaro c33d5d01f3 fix: use MSCHAPV2 wildcard in enterprise eap_users (PAP unsupported) 2026-08-18 19:55:04 -05:00
bzuccaro 603e249999 feat: standalone PineAPE enterprise engine on phy1
The stock daemon's enterprise config generation is broken on this firmware
(it hardcodes eap_server_erp=1, which hostapd rejects), so the enterprise
attack now runs its own karma+PineAPE hostapd instance on wlan1ent/phy1:
iw-created iface, EAP config with catch-all user file, pineape+auth capture
enabled via ctrl, mgmtiface registered in pineapd UCI so captured creds
flow into recon.db (hostap_basic/hostap_chalresp). Boot-recovery redeploys
a live attack after a Mark VIII restart.
2026-08-18 19:53:56 -05:00
bzuccaro 2533f68d70 test: align health tests with immediate pool-disable behavior 2026-08-18 19:33:07 -05:00
bzuccaro 1d063695fa test: health monitor uci-show fake 2026-08-18 19:32:56 -05:00
bzuccaro a4285496fb fix: health monitor disables SSID pool immediately on PING failure
Ring-buffer SIGSEGV counts were unreliable for growth detection; the pool
broadcast is the only known crash cause, so disable it on first failure.
2026-08-18 19:32:49 -05:00