Programming security vulnerabilities are the most common cause of software se-curity breaches in current day computing. While these can easily be avoided byan attentive programmer, many programs still contain these kinds of vulnerabil-ities. This document will describe what the most commonly occuring ones areand will then explain how these can be abused to make a program do somethingit did not intend to do. We will then take a look at how a recent vulnerabilityin popular piece of software was exploited to allow an attacker to take control of the execution ﬂow of that program. Several solutions exist to detect and preventmany, though not all, of the vulnerabilities described in this document in existingprograms without requiring source code modiﬁcations, and in some cases withouteven requiring access to the source code to the applications. We will take an in-depth look at how these solutions are implemented and what their effects are onlegitimate programs, how they attempt to mitigate the restrictions they impose andwhat their impact is on the performance of the programs they attempt to protect.We will also describe if and how these solutions can be bypassed.