Venerable Variadic Vulnerabilities Vanquished Priyam Biswas, Purdue University; Alessandro Di Federico, Politecnico di Milano; Scott A. Carr, Purdue University; Prabhu Rajasekaran, Stijn Volckaert, Yeoul Na, and Michael Franz, University of California, Irvine; Mathias Payer, Purdue University https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/biswas This paper is included in the Proceedings of the 26th USENIX Security Symposium August 16–18, 2017 • Vancouver, BC, Canada ISBN 978-1-931971-40-9 Open access to the Proceedings of the 26th USENIX Security Symposium is sponsored by USENIX Venerable Variadic Vulnerabilities Vanquished Priyam Biswas1, Alessandro Di Federico2, Scott A. Carr1, Prabhu Rajasekaran3, Stijn Volckaert3, Yeoul Na3, Michael Franz3, and Mathias Payer1 1Department of Computer Science, Purdue University fbiswas12,
[email protected],
[email protected] 2Dipartimento di Elettronica, Informazione e Bioingegneria, Politecnico di Milano
[email protected] 3Department of Computer Science, University of California, Irvine frajasekp, stijnv, yeouln,
[email protected] Abstract stractions and high degree of control left to the devel- oper. However, these languages guarantee neither type Programming languages such as C and C++ support vari- nor memory safety, and bugs may lead to memory cor- adic functions, i.e., functions that accept a variable num- ruption. Memory corruption attacks allow adversaries to ber of arguments (e.g., printf). While variadic func- take control of vulnerable applications or to extract sen- tions are flexible, they are inherently not type-safe. In sitive information. fact, the semantics and parameters of variadic functions Modern operating systems and compilers implement are defined implicitly by their implementation. It is left several defense mechanisms to combat memory corrup- to the programmer to ensure that the caller and callee fol- tion attacks.