T3MP3ST public launch build
This commit is contained in:
1 parent
972247b881
commit
184c7d4e59
1589 files changed
+57150
-506
No files matched your search
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* PHP-FPM env_path_info handling — pre-CVE-2019-11043.
|
||||
* Reconstruction of fpm_main.c logic that mishandles the path_info pointer
|
||||
* when a crafted URL like /index.php/%0a... causes path_info to point
|
||||
* BEFORE script_name's start, yielding an out-of-bounds write of a NUL byte.
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct {
|
||||
char *script_name; /* attacker-controlled (request URI) */
|
||||
char *path_info; /* derived from script_name */
|
||||
} fcgi_request_t;
|
||||
|
||||
static int fpm_handle_request(fcgi_request_t *req) {
|
||||
char *path_info = req->path_info;
|
||||
int path_info_offset;
|
||||
|
||||
/* Compute offset of path_info into script_name. Normally non-negative. */
|
||||
path_info_offset = path_info - req->script_name;
|
||||
|
||||
/* BUG: when crafted request makes path_info point BEFORE script_name's
|
||||
buffer (e.g. due to %0a sequences earlier), path_info_offset becomes
|
||||
NEGATIVE. No bounds check below. */
|
||||
if (path_info != NULL) {
|
||||
/* Original code wrote NUL here:
|
||||
script_name[path_info_offset] = '\0';
|
||||
which becomes an out-of-bounds write with attacker control of the
|
||||
negative index, corrupting memory and enabling RCE via overwriting
|
||||
fcgi env table pointers. */
|
||||
req->script_name[path_info_offset] = '\0';
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user