COMMON ATTACK PATTERN ENUMERATION AND CLASSIFICATIONMITRE canlı kaydı
CAPEC-47
Buffer Overflow via Parameter Expansion
In this attack, the target software is given input that the adversary knows will be modified and expanded in size during processing. This attack relies on the target software failing to anticipate that the expanded data may exceed some internal limit, thereby creating a buffer overflow.
Soyutlama
Detailed
Tipik ciddiyet
High
Saldırı ihtimali
Medium
Saldırıyı anla
Bu saldırı kalıbı nedir?
In this attack, the target software is given input that the adversary knows will be modified and expanded in size during processing. This attack relies on the target software failing to anticipate that the expanded data may exceed some internal limit, thereby creating a buffer overflow.
Uygulama akışı
Saldırı adım adım nasıl ilerler?
Explore
Identify target application
The adversary identifies a target application or program to perform the buffer overflow on. Adversaries often look for applications that accept user input and that perform manual memory management.
Experiment
Find injection vector
The adversary identifies an injection vector to deliver the excessive content to the targeted application's buffer.
Kullanılan teknikler
- In this attack, the normal method of providing large user input does not work. The program performs bounds checking on the user input, but not the expanded user input. The adversary needs to provide input that they believe will be expanded by the program to overflow a buffer. To identify where this is possible, an adversary either needs to have knowledge of the inner workings of the program or use a disassembler and other reverse engineering tools to guide the search.
Craft overflow content
The adversary crafts the input to be given to the program. If the intent is to simply cause the software to crash, the input needs only to expand to an excessive quantity of random data. If the intent is to leverage the overflow for execution of arbitrary code, the adversary will craft input that expands in a way that not only overflows the targeted buffer but does so in such a way that the overwritten return address is replaced with one of the adversaries' choosing which points to code injected by the adversary.
Kullanılan teknikler
- Create specific files and directories on the system and then give input using path traversal shortcuts to those directories that could expand past an input buffer.
Exploit
Overflow the buffer
Using the injection vector, the adversary gives the crafted input to the program, overflowing the buffer.
Gereksinimler
Saldırının gerçekleşmesi için ne gerekir?
Ön koşullar
- The program expands one of the parameters passed to a function with input controlled by the user, but a later function making use of the expanded parameter erroneously considers the original, not the expanded size of the parameter.
- The expanded parameter is used in the context where buffer overflow may become possible due to the incorrect understanding of the parameter size (i.e. thinking that it is smaller than it really is).
Gerekli beceri
- High: Finding this particular buffer overflow may not be trivial. Also, stack and especially heap based buffer overflows require a lot of knowledge if the intended goal is arbitrary code execution. Not only that the adversary needs to write the shell code to accomplish their goals, but the adversary also needs to find a way to get the program execution to jump to the planted shell code. There also needs to be sufficient room for the payload. So not every buffer overflow will be exploitable, even by a skilled adversary.
Gerekli kaynak
- Access to the program source or binary. If the program is only available in binary then a disassembler and other reverse engineering tools will be helpful.
Etki
Başarılı saldırı neye yol açar?
Gain Privileges
Etkilenen alanlar: Confidentiality, Access Control, Authorization
Unreliable Execution
Etkilenen alanlar: Availability
Modify Data
Etkilenen alanlar: Integrity
Execute Unauthorized Commands
Etkilenen alanlar: Confidentiality, Integrity, Availability
Read Data
Etkilenen alanlar: Confidentiality
Savunma
Nasıl önlenir ve etkisi azaltılır?
1
Ensure that when parameter expansion happens in the code that the assumptions used to determine the resulting size of the parameter are accurate and that the new size of the parameter is visible to the whole system
Gerçek dünya
MITRE örnek olayları
Örnek olay 1Detay
Attack Example: FTP glob()
The glob() function in FTP servers has been susceptible to attack as a result of incorrect resizing. This is an ftpd glob() Expansion LIST Heap Overflow Vulnerability. ftp daemon contains a heap-based buffer overflow condition. The overflow occurs when the LIST command is issued with an argument that expands into an oversized string after being processed by glob().
This buffer overflow occurs in memory that is dynamically allocated. It may be possible for adversaries to exploit this vulnerability and execute arbitrary code on the affected host.
To exploit this, the adversary must be able to create directories on the target host.
The glob() function is used to expand short-hand notation into complete file names. By sending to the FTP server a request containing a tilde (~) and other wildcard characters in the pathname string, a remote adversary can overflow a buffer and execute arbitrary code on the FTP server to gain root privileges. Once the request is processed, the glob() function expands the user input, which could exceed the expected length. In order to exploit this vulnerability, the adversary must be able to create directories on the FTP server.
[ REF-1 ]
See also: CVE-2001-0249
Örnek olay 2Detay
Buffer overflow in the glob implementation in libc in NetBSD-current before 20050914, and NetBSD 2.* and 3.* before 20061203, as used by the FTP daemon, allows remote authenticated users to execute arbitrary code via a long pathname that results from path expansion.
The limit computation of an internal buffer was done incorrectly. The size of the buffer in byte was used as element count, even though the elements of the buffer are 2 bytes long. Long expanded path names would therefore overflow the buffer.
See also: CVE-2006-6652