BREACH (a backronym: Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext) is a security exploit against HTTPS when using HTTP compression. BREACH is built based on the CRIME security exploit. BREACH was announced at the August 2013 Black Hat conference by security researchers Angelo Prado, Neal Harris and Yoel Gluck. The idea had been discussed in community before the announcement.
While the CRIME attack was presented as a general attack that could work effectively against a large number of protocols, only exploits against SPDY request compression and TLS compression were demonstrated and largely mitigated in browsers and servers. The CRIME exploit against HTTP compression has not been mitigated at all, even though the authors of CRIME have warned that this vulnerability might be even more widespread than SPDY and TLS compression combined.
BREACH is an instance of the CRIME attack against HTTP compression—the use of gzip or DEFLATE data compression algorithms via the content-encoding option within HTTP by many web browsers and servers. Given this compression oracle, the rest of the BREACH attack follows the same general lines as the CRIME exploit, by performing an initial blind brute-force search to guess a few bytes, followed by divide-and-conquer search to expand a correct guess to an arbitrarily large amount of content.
BREACH exploits the compression in the underlying HTTP protocol. Therefore, turning off TLS compression makes no difference to BREACH, which can still perform a chosen-plaintext attack against the HTTP payload.
As a result, clients and servers are either forced to disable HTTP compression completely (thus reducing performance), or to adopt workarounds to try to foil BREACH in individual attack scenarios, such as using cross-site request forgery (CSRF) protection.
Another suggested approach is to disable HTTP compression whenever the referrer header indicates a cross-site request, or when the header is not present. This approach allows effective mitigation of the attack without losing functionality, only incurring a performance penalty on affected requests.
Another approach is to add padding at the TLS, HTTP header, or payload level. Around 2013–2014, there was an IETF draft proposal for a TLS extension for length-hiding padding that, in theory, could be used as a mitigation against this attack. It allows the actual length of the TLS payload to be disguised by the insertion of padding to round it up to a fixed set of lengths, or to randomize the external length, thereby decreasing the likelihood of detecting small changes in compression ratio that is the basis for the BREACH attack. However, this draft has since expired without further action.
- "Is HTTP compression safe?". Information Security Stack Exchange. Archived from the original on 2018-04-12. Retrieved 2018-04-11.
- Goodin, Dan (August 1, 2013). "Gone in 30 seconds: New attack plucks secrets from HTTPS-protected pages". Ars Technica.
- Angelo Prado, Neal Harris and Yoel Gluck. "SSL, gone in 30 seconds: A BREACH beyond CRIME" (PDF). Retrieved 2013-09-07. CS1 maint: discouraged parameter (link)
- Omar Santos (August 6, 2013). "BREACH, CRIME and Black Hat". Cisco.
- Ivan Ristic (October 14, 2013). "Defending against the BREACH Attack". Qualys.com. Retrieved 2013-11-25. CS1 maint: discouraged parameter (link)
- manu (October 14, 2013). "BREACH mitigation". Qualys Community. Retrieved 2013-11-25. CS1 maint: discouraged parameter (link)
- A. Pironti; et al. (2013-09-11). "Length Hiding Padding for the Transport Layer Security Protocol". IETF Network Working Group. Retrieved 2017-10-18. CS1 maint: discouraged parameter (link)
- Tool that runs the BREACH attack demonstrated at BlackHat 2013
- HEIST, a related compression-based attack on the body of the response demonstrated at BlackHat 2016