Buffer overflows occur in lower-level programming languages, such as C, C++, etc. A buffer overflow requires the following elements:
application program is written in a low-level programming language
program allocates a fixed-size buffer
program takes user input (from network or command-line) and uses it to populate all or some part of the buffer