Join the movement for privacy and free speech — doxx.net VPN
Join us on Discord
“Bombdrop: Weaponizing Multicast Against Apple’s mDNSResponder” How a 20-year-old trust assumption in Apple’s networking stack enables denial-of-service across entire device fleets.
Disclosure Timeline (Apple mDNSResponder Vulnerability) March 2025: Reported a multicast-based denial-of-service vulnerability affecting Apple’s mDNSResponder. Provided full PoC, technical analysis, video demo, and diagnostic data. April–July 2025: Worked with Apple’s security team over several rounds of testing and feedback. Issue acknowledged. Apple indicated it would be addressed in macOS Tahoe 26. July 2025: Tested against the Tahoe 26 beta — issue remained reproducible. Shared updated results, including 99.9% CPU usage on mDNSResponder, persistent app hangs, and service crashes. September 2025: Apple closed the report and declined to issue a bounty. Their statement: “This report does not qualify for an Apple Security Bounty.”
FOR RESEARCH PURPOSES ONLY.
bombdrop is a security research tool that demonstrates a critical vulnerability in Apple's mDNSResponder service. This tool floods networks with specially crafted multicast DNS (mDNS) announcements that can overwhelm the cache management systems in Apple devices, causing network-wide service degradation. When executed on a local network, bombdrop can affect all connected Apple devices simultaneously, resulting in:
- Frozen web browsing in Safari
- Unresponsive AirDrop and AirPlay services
- Significant CPU usage and battery drain
- System-wide network performance issues
- Temporary denial of service for Bonjour-dependent applications
- Non-recoverable mDNSResponder causing MacOS to be unusable until a reboot.
This proof-of-concept tool highlights the need for more robust cache management in multicast DNS implementations, particularly in high-density networks where many devices share the same broadcast domain.
mDNS operates on UDP port 5353 using the multicast address 224.0.0.251 and is implemented in the mDNSResponder daemon.
Analysis of the mDNSResponder source code reveals design limitations in the DNS cache implementation that makes it vulnerable to exhaustion attacks:
In daemon.c, the cache is initialized with a modest size:
#define RR_CACHE_SIZE ((32*1024) / sizeof(CacheRecord))
static CacheEntity rrcachestorage[RR_CACHE_SIZE];
#define kRRCacheGrowSize (sizeof(CacheEntity) * RR_CACHE_SIZE)From our code analysis, I can see the key implementation details:
-
Pre-Request Condition: The user must have an application open that interacts with mDNSResponder, such as opening AirPlay devices, using Apple Music, or even just browsing with Safari.
-
Dynamic Cache Growth: When the cache fills up, the
mDNS_GrowCachefunction allocates more memory:// in daemon.c else if (result == mStatus_GrowCache) { if (allocated >= kRRCacheMemoryLimit) return; // Limited to 1MB on iOS devices allocated += kRRCacheGrowSize; CacheEntity *storage = mallocL("mStatus_GrowCache", sizeof(CacheEntity) * RR_CACHE_SIZE); if (storage) mDNS_GrowCache(m, storage, RR_CACHE_SIZE); }
-
Memory Limits: While iOS devices have a 1MB limit (
kRRCacheMemoryLimit), macOS appears to have no hard upper limit:#define kRRCacheMemoryLimit 1000000 // For now, we limit the cache to at most 1MB on iOS devices.
-
Cache Management Complexity: The cache management involves complex operations:
CacheRecordAddfor adding new recordsCheckCacheExpirationfor expiring recordsmDNS_PurgeCacheResourceRecordfor purging records- Hash-based record lookup through
CacheGroupForName
NOTE: Running this on MacOS will cause the mDNSResponder fight the POC. You should only run this on a Linux VM or a seperate system that doesn't run mDNSResponder as part of the core OS.
For best results, use the following command:
go run bombdrop.go -i <your interface> -n 1000000 -type airplay -ttl-mode extreme -name-mode dynamiOther examples:
go run bombdrop.go -i ens160 -n 1000000 -type airplay -ttl-mode extreme -name-mode dynamicUsage:
sudo go run bombdrop.go -n 5000 [-debug] [-i eth0] [-b 224.0.0.251] [-c 10] [-type all]
Options:
-n <num> Number of devices to advertise (default: 1000)
-debug Enable debug logging
-i <iface> Network interface to use (default: system chosen)
-b <ip> Target IP address (default: 224.0.0.251)
-s <ip> Source IP address (default: system chosen)
-c <count> Number of announcement rounds (0 = infinite)
-type <t> Broadcast type: airplay, airdrop, homekit, airprint, or all (default: all)
-spoof <network> Enable IP address spoofing with network CIDR (e.g., -spoof 192.168.1.0/24)
-ttl <seconds> TTL value in seconds (default: 7200)
-ttl-mode <mode> TTL mode: normal, long, extreme (default: normal)
-name-mode <m> Device naming mode: static, dynamic, compare (default: mixed)
-pregenerate Pre-generateExamples:
sudo go run bombdrop.go -n 5000
sudo go run bombdrop.go -i eth0 -n 1000 -type airplay
sudo go run bombdrop.go -b 192.168.1.255 -n 1000 -type homekit
sudo go run bombdrop.go -n 100 -c 10 -type airprint
Notes:
- Building requires libpcap.
- It's difficult to run this on MacOS due to the conflict with the mDNSResponder service.
- Will work on VMs like VM Ware, Virtualbox, etc.
- For multicast: 224.0.0.251 is the standard mDNS address
- For broadcast: use your subnet's broadcast (typically x.x.x.255)
- For /31 networks: there is no broadcast address, use multicast or direct IP
- Root/admin privileges are usually required for multicast
For the best results:
- Use randomized device names to ensure uniqueness, preventing cache consolidation
- Set long TTLs to delay the
NextCacheChecktime and prevent record expiration - Announce multiple service types (AirPlay, AirDrop, HomeKit, AirPrint)
- Include varying record sizes to exercise different cache storage paths
For the worst results: I use 1000000 devices with Airplay only. Airplay seems to be the worst case scenario.
When a target device receives these announcements, each unique record triggers the CreateNewCacheEntry process. Under sufficient pressure, the cache management algorithms struggle to efficiently prioritize and evict records.
As the mDNSResponder's cache becomes overwhelmed:
- Cache lookups become increasingly expensive (traversing large hash chains)
- Memory usage increases, potentially reaching system limits
- CPU on mDNSResponder is reached at 100% it appears to be single threaded. Once mDNSResponder is saturated, it can no longer respond to any other requests.
- The
NextCacheCheckprocessing becomes more CPU intensive - Network operations dependent on mDNS become sluggish or fail
- All Bonjour-based services experience degraded performance
Sometimes mDNSResponder will not recover. I haven't figured out what the condition is that casues it, seems like when we mess around with different TTLs it hits some unrecoverable condition. Reboot or a kill -9 of mDNSResponder seems to fix it.
I've also seen AppleTVs and iPhones crash when the attack is happening.
This vulnerability affects Apple operating systems with the identified mDNSResponder implementation:
- macOS (through at least 14.x)
- iOS/iPadOS (through at least 17.x)
- tvOS (through at least 17.x)
- watchOS (through at least 10.x)
Apple M* chips seem to be impacted more than Intel chips. Not sure why but I didn't really test it extensively.
In my disclosure to Apple, I proposed several mitigations to improve mDNSResponder’s resilience under cache exhaustion, including: limiting the number of records accepted per source IP or MAC, rate-limiting high-volume multicast announcements, improving eviction priority in cache management, and implementing stricter TTL handling to avoid record retention abuse. I also pointed out that mDNSResponder processes multicast traffic without scrutiny, on a single thread, and trusts all records equally — a dangerous assumption in 2025’s untrusted network environments. One telling comment in Apple’s own source code reinforces this design flaw:
// in mDNSCore/mDNS.c
All records in a DNS response packet are treated as equally valid statements of truth. If we want
to guard against spoof responses, then the only credible protection against that is cryptographic
security, e.g. DNSSEC., not worrying about which section in the spoof packet contained the record.This trust model, suitable for the early 2000s, no longer holds up in hostile or crowded networks like schools, Apple's own stores, airports, or ISP-shared segments. Apple should treat unsolicited multicast data with suspicion and enforce boundaries within mDNSResponder accordingly.
If you like this work, please take a look at some of my other projects:
Privacy Focused VPN and firewall piercing system: https://beta.doxx.net
Browser GPS Spoofing: https://github.com/doxx/doxx.net/tree/main/doxxulator
Join us on Discord: https://discord.com/invite/Gr9rByrEzZ