Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
10.1145/3372297.3423340acmconferencesArticle/Chapter ViewAbstractPublication PagesccsConference Proceedingsconference-collections
research-article

FREEDOM: Engineering a State-of-the-Art DOM Fuzzer

Published: 02 November 2020 Publication History

Abstract

The DOM engine of a web browser is a popular attack surface and has been thoroughly fuzzed during its development. A common approach adopted by the latest DOM fuzzers is to generate new inputs based on context-free grammars. However, such a generative approach fails to capture the data dependencies in the inputs of a DOM engine, namely, HTML documents. Meanwhile, it is unclear whether or not coverage-guided mutation, which is well-known to be effective in fuzzing numerous software, still remains to be effective against DOM engines. Worse yet, existing DOM fuzzers cannot adopt a coverage-guided approach because they are unable to fully support HTML mutation and suffer from low browser throughput. To scientifically understand the effectiveness and limitations of the two approaches, we propose FreeDom, a full-fledged cluster-friendly DOM fuzzer that works with both generative and coverage-guided modes. FreeDom relies on a context-aware intermediate representation to describe HTML documents with proper data dependencies. FreeDom also exhibits up to 3.74x higher throughput through browser self-termination. FreeDom has found 24 previously unknown bugs in commodity browsers including Safari, Firefox, and Chrome, and 10 CVEs has been assigned so far. With the context-aware generation, FreeDom finds 3x more unique crashes in WebKit than the state-of-the-art DOM fuzzer, Domato. FreeDom guided by coverage is more effective in revealing new code blocks (2.62%) and finds three complex bugs that its generative approach fails to find. However, coverage-guided mutation that bootstraps with an empty corpus triggers 3.8x fewer unique crashes than the generative approach. The newly revealed coverage, more often than not, negatively affects the effectiveness of DOM fuzzers in bug finding. Therefore, we consider context-aware generation the best practice to find more DOM engine bugs and expect further improvement on coverage-guided DOM fuzzing facilitated by FreeDom.

Supplementary Material

MOV File (Copy of CCS2020_fpe061_Wen Xu - Andrew Diehl.mov)
Presentation video

References

[1]
Aldeid . Bf3. https://www.aldeid.com/wiki/Bf3 (visited on September 12, 2020).
[2]
Apple Inc. HFS Plus Volume Format. https://developer.apple.com/library/archive/technotes/tn/tn1150.html (visited on September 12, 2020).
[3]
Apple Inc. Property List Programming Topics for Core Foundation. https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFPropertyLists/CFPropertyLists.html (visited on September 12, 2020).
[4]
Aschermann, C., Frassetto, T., Holz, T., Jauernig, P., Sadeghi, A.-R., and Teuchert, D. Nautilus: Fishing for deep bugs with grammars. In Proceedings of the 2019 Annual Network and Distributed System Security Symposium (NDSS) (San Diego, CA, Feb. 2019).
[5]
Beterke, F., Geshev, G., and Plaskett, A. Apple Safari - PWN2OWN Desktop Exploit. https://labs.f-secure.com/assets/BlogFiles/apple-safari-pwn2own-vuln-write-up-2018--10--29-final.pdf (visited on September 12, 2020).
[6]
Bienz, T., Cohn, R., and Systems, A. Portable document format reference manual. Citeseer, 1993.
[7]
Bo, Q., and Lu, R. POWER IN PAIRS: How one fuzzing template revealed over 100 IE UAF vulnerabilities. In Black Hat USA Briefings (Black Hat USA) (Amsterdam, The Netherlands, Oct. 2014).
[8]
Böhme, M., Pham, V.-T., Nguyen, M.-D., and Roychoudhury, A. Directed greybox fuzzing. In Proceedings of the 24th ACM Conference on Computer and Communications Security (CCS) (Dallas, TX, Oct.--Nov. 2017).
[9]
Böhme, M., Pham, V.-T., and Roychoudhury, A. Coverage-based greybox fuzzing as markov chain. In Proceedings of the IEEE Transactions on Software Engineering (2017).
[10]
Deveria, A. WebGL 2.0. https://caniuse.com/#feat=webgl2 (visited on September 12, 2020).
[11]
Fratric, I. DOM fuzzer. https://github.com/googleprojectzero/domato (visited on September 12, 2020).
[12]
Fratric, I. The Great DOM Fuzz-off of 2017. https://googleprojectzero.blogspot.com/2017/09/the-great-dom-fuzz-off-of-2017.html (visited on September 12, 2020).
[13]
Fratric, I. WebKit Fuzzing. https://github.com/googleprojectzero/p0tools (visited on September 12, 2020).
[14]
Google . Chrome Vulnerability Reward Program Rules. https://www.google.com/about/appsecurity/chrome-rewards/index.html (visited on September 12, 2020).
[15]
Google . ClusterFuzz. https://google.github.io/clusterfuzz (visited on September 12, 2020).
[16]
Google . Issue 666246. https://bugs.chromium.org/p/chromium/issues/detail?id=666246 (visited on September 12, 2020).
[17]
Google . Issue 671328. https://bugs.chromium.org/p/chromium/issues/detail?id=671328 (visited on September 12, 2020).
[18]
Google. syzkaller is an unsupervised, coverage-guided kernel fuzzer. https://github.com/google/syzkaller (visited on September 12, 2020).
[19]
Groß, S. Fuzzil: Coverage guided fuzzing for javascript engines. Master's thesis, TU Braunschweig, 2018.
[20]
Han, H., Oh, D., and Cha, S. K. CodeAlchemist: Semantics-aware code generation to find vulnerabilities in javascript engines. In Proceedings of the 2019 Annual Network and Distributed System Security Symposium (NDSS) (San Diego, CA, Feb. 2019).
[21]
Holler, C., Herzig, K., and Zeller, A. Fuzzing with code fragments. In Proceedings of the 21st USENIX Security Symposium (Security) (Bellevue, WA, Aug. 2012).
[22]
Lee, S., Han, H., Cha, S. K., and Son, S. Montage: A Neural Network Language Model-Guided JavaScript Engine Fuzzer. In Proceedings of the 29th USENIX Security Symposium (Security) (Boston, MA, Aug. 2020).
[23]
Lin, Y.-D., Liao, F.-Z., Huang, S.-K., and Lai, Y.-C. Browser fuzzing by scheduled mutation and generation of document object models. In Proceedings of the 49th IEEE International Carnahan Conference on Security Technology (Taipei, Taiwan, Sept. 2015).
[24]
Liu, J., and Xu, C. Pwning Microsoft Edge Browser: From Memory Safety Vulnerability to Remote Code Execution. POC.
[25]
LLVM Project . libFuzzer - a library for coverage-guided fuzz testing. https://llvm.org/docs/LibFuzzer.html (visited on September 12, 2020).
[26]
Microsoft Security Research and Defense . VulnScan - Automated Triage and Root Cause Analysis of Memory Corruption Issues. https://msrc-blog.microsoft.com/2017/10/03/vulnscan-automated-triage-and-root-cause-analysis-of-memory-corruption-issues/ (visited on September 12, 2020).
[27]
Mozilla . Canvas API. https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API (visited on September 12, 2020).
[28]
Mozilla . DOM fuzzers. https://github.com/MozillaSecurity/domfuzz (visited on September 12, 2020).
[29]
Mozilla . IndexedDB API. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API (visited on September 12, 2020).
[30]
Mozilla . Localizations and character encodings. https://developer.mozilla.org/en-US/docs/Web/Guide/Localizations_and_character_encodings (visited on September 12, 2020).
[31]
Mozilla . Vendor Prefix. https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix (visited on September 12, 2020).
[32]
Mozilla . Web Audio API. https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API (visited on September 12, 2020).
[33]
Mozilla Security . Avalanche. https://github.com/MozillaSecurity/avalanche (visited on September 12, 2020).
[34]
Mozilla Security . dharma. https://github.com/MozillaSecurity/dharma (visited on September 12, 2020).
[35]
Mozilla Security . FFPuppet. https://github.com/MozillaSecurity/ffpuppet (visited on September 12, 2020).
[36]
Mozilla Security . Grizzly Browser Fuzzing Framework. https://blog.mozilla.org/security/2019/07/10/grizzly (visited on September 12, 2020).
[37]
Mozilla Security . Introducing the ASan Nightly Project. https://blog.mozilla.org/security/2018/07/19/introducing-the-asan-nightly-project/ (visited on September 12, 2020).
[38]
Mozilla Security . JavaScript engine fuzzers. https://github.com/MozillaSecurity/funfuzz (visited on September 12, 2020).
[39]
Mozilla Security . Writing an Adapter. https://github.com/MozillaSecurity/grizzly/wiki/Writing-an-Adapter (visited on September 12, 2020).
[40]
Paoli, J., Valet-Harper, I., Farquhar, A., and Sebestyen, I. Ecma-376 office open xml file formats. http://www.ecmainternational.org/publications/standards/Ecma-376.htm (visited on September 12, 2020).
[41]
Park, S., Xu, W., Yun, I., Jang, D., and Kim, T. Fuzzing JavaScript Engines with Aspect-preserving Mutation (to appear). In Proceedings of the 41st IEEE Symposium on Security and Privacy (Oakland) (San Francisco, CA, May 2020).
[42]
Peach Tech . Peach Fuzzer. https://sourceforge.net/projects/peachfuzz (visited on September 12, 2020).
[43]
Pham, V.-T., Böhme, M., Santosa, A. E., Caciulescu, A. R., and Roychoudhury, A. Smart greybox fuzzing. In Proceedings of the IEEE Transactions on Software Engineering (2019).
[44]
Rebert, A., Cha, S. K., Avgerinos, T., Foote, J., Warren, D., Grieco, G., and Brumley, D. Optimizing seed selection for fuzzing. In Proceedings of the 23rd USENIX Security Symposium (Security) (San Diego, CA, Aug. 2014).
[45]
Rodeh, O., Bacik, J., and Mason, C. Btrfs: The linux b-tree filesystem. ACM Transactions on Storage (TOS) 9, 3 (2013), 1--32.
[46]
Sanfilippo, S. Redis, Open source in-memory database, cache and message broker. https://redis.io/ (visited on September 12, 2020).
[47]
SensePost . Wadi Fuzzing Harness. https://github.com/sensepost/wadi (visited on September 12, 2020).
[48]
Serebryany, K., Bruening, D., Potapenko, A., and Vyukov, D. Addresssanitizer: A fast address sanity checker. In Proceedings of the 2012 USENIX Annual Technical Conference (ATC) (Boston, MA, June 2012).
[49]
Veditz, D. Fixing an SVG Animation Vulnerability. https://blog.mozilla.org/security/2016/11/30/fixing-an-svg-animation-vulnerability/ (visited on September 12, 2020).
[50]
W3C . HTML: 8.11 Animation frames. https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#animation-frames (visited on September 12, 2020).
[51]
W3C . SVG Animations Level 2: 2.14. The 'set' element. https://svgwg.org/specs/animations/#SetElement (visited on September 12, 2020).
[52]
W3C . SVG Animations Level 2: Attributes to identify the target attribute or property for an animation. https://svgwg.org/specs/animations/#AttributeNameAttribute (visited on September 12, 2020).
[53]
Wang, J., Chen, B., Wei, L., and Liu, Y. Skyfire: Data-driven seed generation for fuzzing. In Proceedings of the 38th IEEE Symposium on Security and Privacy (Oakland) (San Jose, CA, May 2017).
[54]
Wang, J., Chen, B., Wei, L., and Liu, Y. Superion: Grammar-aware greybox fuzzing. In Proceedings of the 41st International Conference on Software Engineering (ICSE) (Montreal, Canada, May 2019).
[55]
Xu, W., Moon, H., Kashyap, S., Tseng, P.-N., and Kim, T. Fuzzing File Systems via Two-Dimensional Input Space Exploration. In Proceedings of the 40th IEEE Symposium on Security and Privacy (Oakland) (San Francisco, CA, May 2019).
[56]
Yang, X., Chen, Y., Eide, E., and Regehr, J. Finding and understanding bugs in C compilers. In Proceedings of the 2011 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI) (San Jose, CA, June 2011).
[57]
Zalewski, M. american fuzzy lop (2.52b). http://lcamtuf.coredump.cx/afl (visited on September 12, 2020).
[58]
Zalewski, M. cross_fuzz. https://lcamtuf.coredump.cx/cross_fuzz/ (visited on September 12, 2020).

Cited By

View all
  • (2024)Collapse Like A House of Cards: Hacking Building Automation System Through FuzzingProceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security10.1145/3658644.3690216(1761-1775)Online publication date: 2-Dec-2024
  • (2024)Parse Me, Baby, One More Time: Bypassing HTML Sanitizer via Parsing Differentials2024 IEEE Symposium on Security and Privacy (SP)10.1109/SP54263.2024.00177(203-221)Online publication date: 19-May-2024
  • (2024)SoK: Prudent Evaluation Practices for Fuzzing2024 IEEE Symposium on Security and Privacy (SP)10.1109/SP54263.2024.00137(1974-1993)Online publication date: 19-May-2024
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security
October 2020
2180 pages
ISBN:9781450370899
DOI:10.1145/3372297
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 02 November 2020

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. browser vulnerability discovery
  2. context-aware dom fuzzing
  3. coverage-guided dom fuzzing

Qualifiers

  • Research-article

Conference

CCS '20
Sponsor:

Acceptance Rates

Overall Acceptance Rate 1,261 of 6,999 submissions, 18%

Upcoming Conference

CCS '25

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)118
  • Downloads (Last 6 weeks)9
Reflects downloads up to 06 Feb 2025

Other Metrics

Citations

Cited By

View all
  • (2024)Collapse Like A House of Cards: Hacking Building Automation System Through FuzzingProceedings of the 2024 on ACM SIGSAC Conference on Computer and Communications Security10.1145/3658644.3690216(1761-1775)Online publication date: 2-Dec-2024
  • (2024)Parse Me, Baby, One More Time: Bypassing HTML Sanitizer via Parsing Differentials2024 IEEE Symposium on Security and Privacy (SP)10.1109/SP54263.2024.00177(203-221)Online publication date: 19-May-2024
  • (2024)SoK: Prudent Evaluation Practices for Fuzzing2024 IEEE Symposium on Security and Privacy (SP)10.1109/SP54263.2024.00137(1974-1993)Online publication date: 19-May-2024
  • (2024)Multi-level Fuzzing for Document File Formats with Intermediate Representations2024 IEEE 35th International Symposium on Software Reliability Engineering (ISSRE)10.1109/ISSRE62328.2024.00037(295-306)Online publication date: 28-Oct-2024
  • (2023)GLeeFuzzProceedings of the 32nd USENIX Conference on Security Symposium10.5555/3620237.3620343(1883-1899)Online publication date: 9-Aug-2023
  • (2023)Towards Better Semantics Exploration for Browser FuzzingProceedings of the ACM on Programming Languages10.1145/36228197:OOPSLA2(604-631)Online publication date: 16-Oct-2023
  • (2023)A Usability Evaluation of AFL and libFuzzer with CS StudentsProceedings of the 2023 CHI Conference on Human Factors in Computing Systems10.1145/3544548.3581178(1-18)Online publication date: 19-Apr-2023
  • (2023)AMF: Efficient Browser Interprocess Communication Fuzzing2023 20th Annual International Conference on Privacy, Security and Trust (PST)10.1109/PST58708.2023.10319984(1-6)Online publication date: 21-Aug-2023
  • (2023)The progress, challenges, and perspectives of directed greybox fuzzingSoftware Testing, Verification and Reliability10.1002/stvr.186934:2Online publication date: 14-Dec-2023
  • (2022)Fuzzing: A Survey for RoadmapACM Computing Surveys10.1145/351234554:11s(1-36)Online publication date: 9-Sep-2022
  • Show More Cited By

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media