fix(portals,dns,radio1,capture): live-validation fixes, verified on Pager 24.10.1
- portals: replace zipfile with struct+zlib ZIP reader (python3-light has no urllib; import endpoint was dead on device) - dns hijack: uci add_list/del_list for dhcp.@dnsmasq[0].address (list option; plain set was silently dropped from generated dnsmasq config) - radio1: bridge attack APs into br-lan via network.brlan.ports so victims get DHCP/portal reach; wlan1ent runtime-bridged after hostapd verify (retry loop may recreate the iface) - capture: auto-start pinned wlan1mon pcap on 5GHz WPA deploy, teardown on stop; loot flows via hc22000 export (crack-verified end-to-end) - enterprise: pineapd restart after ctrl link + re-assert PineAPE toggles Documented residual: pineapd refuses forwarding from foreign hostapd instances (broken pipe), and daemon set_ap rejects radio1 names - so hostap_handshake rows for radio1 twins and enterprise cred tables cannot populate without a Hak5 firmware change. New tests/test_validation_fixes.py covers each fix (TDD); full suite (29 modules) green.
This commit is contained in:
@@ -169,6 +169,34 @@ zero crashes over sustained watches):
|
||||
`GET /api/health` reports pineapd/monitor state; the top bar shows a
|
||||
PINEAP OK / POOL OFF / PINEAPD DOWN chip.
|
||||
|
||||
### Live validation findings (v1.4.x, Pager 24.10.1)
|
||||
|
||||
Fixed after an on-hardware attack validation pass:
|
||||
|
||||
1. **Evil Portal import** no longer uses `zipfile` (pulls
|
||||
`pathlib → urllib`, absent from python3-light). A minimal
|
||||
`struct`+`zlib` ZIP reader handles stored/deflate entries.
|
||||
2. **Portal DNS hijack** now uses `uci add_list/del_list`
|
||||
(`dhcp.@dnsmasq[0].address` is a list option; a plain `uci set` was
|
||||
silently dropped from the generated dnsmasq config).
|
||||
3. **5 GHz attack APs are bridged** into `br-lan`
|
||||
(`network.brlan.ports`) so victims get DHCP/portal reach; the
|
||||
standalone enterprise AP (`wlan1ent`) is runtime-bridged after its
|
||||
hostapd instance verifies ENABLED (the retry loop may recreate it).
|
||||
4. **5 GHz WPA deploys auto-start a pinned `wlan1mon` capture** and the
|
||||
matching stop tears it down: loot flows via pcap → `.hc22000` export
|
||||
instead of the dead daemon path below.
|
||||
|
||||
Residual firmware limitation (not fixable in-process): pineapd refuses
|
||||
handshake/PineAPE forwarding from hostapd instances it did not provision
|
||||
itself (`PINEAP: could not send ... Broken pipe`), and the stock daemon's
|
||||
`set_ap` rejects radio1 interface names ("Invalid access point
|
||||
interface"). Consequences: `hostap_handshake` rows never populate for
|
||||
radio1 evil twins (use the auto-capture + `.hc22000` export, which is
|
||||
crack-verified end-to-end), and enterprise credentials never reach
|
||||
`hostap_basic`/`hostap_chalresp` even though the AP terminates
|
||||
PEAP/MSCHAPv2 successfully. Fixing these requires a Hak5 pineapd change.
|
||||
|
||||
## Security notes
|
||||
|
||||
- Auth via device password validated against the daemon; HttpOnly session
|
||||
|
||||
Reference in New Issue
Block a user