=============================================== Date: 29/11/2015 Credit: Nicholas Lemonias .::PROFTPD v1.3.5a HEAP OVERFLOWS ::. ADVANCED INFORMATION SECURITY CORPORATION Keeping Things Simple! ====================================================== .88888888:. 88888888.88888. .8888888888888888. 888888888888888888 888' _`888'_ `88888 888 888 888 88888 888_888_::_888_:888 888:::,::,:::::8888 888`:::::::::'`8888 .888 `::::' 8:88. 8888 `8:888. .8888' `888888. .8888:.. .::. ...:'8888888:. .8888.' :' `'::`88:88888 .8888 ' `.888:8888. 888:8 . 888:88888 .888:88 .: 888:88888: 8888888. :: 88:888888 `.::.888. :: .88888888 .::::::.888. :: :::`888'.:. ::::::::::.888 ' .:::::::::::: ::::::::::::.8 ' .:8::::::::::::. .::::::::::::::. .:888::::::::::::: :::::::::::::::888:.__..:88888:::::::::::' `'.:::::::::::88888888888.888:::::::::' `':::_:' -- '' -'-' `':_::::'`. ================== INTRODUCTION ================== ProFTPD is Free and open-source software, compatible with Unix-like systems and Microsoft Windows (via Cygwin). Along with vsftpd and Pure-FTPd, ProFTPD is among the most popular FTP servers in Unix-like environments today. Compared to those, which focus e.g. on simplicity, speed or security, ProFTPD's primary design goal is to be a highly feature rich FTP server, exposing a large amount of configuration options to the user ==================================================== Description: During a manual source code audit of ProFTPD latest, various security issues were discovered. [3] ===================================================== =========================== CODE SNIPPET (PoC 1) =========================== ../../mod_sftp/fxp.c:1217-1251 static struct fxp_extpair *fxp_msg_read_extpair(pool *p, unsigned char **buf, uint32_t *buflen) { uint32_t namelen, datalen; unsigned char *name, *data; struct fxp_extpair *extpair; namelen = sftp_msg_read_int(p, buf, buflen); if (*buflen < namelen) { (void) pr_log_writefile(sftp_logfd, MOD_SFTP_VERSION, "SFTP message format error: unable to read %lu bytes of extpair name " "data (buflen = %lu)", (unsigned long) namelen, (unsigned long) *buflen); SFTP_DISCONNECT_CONN(SFTP_SSH2_DISCONNECT_BY_APPLICATION, NULL); } name = palloc(p, namelen + 1); memcpy(name, *buf, namelen); (*buf) += namelen; (*buflen) -= namelen; name[namelen] = '\0'; datalen = sftp_msg_read_int(p, buf, buflen); if (datalen > 0) { data = sftp_msg_read_data(p, buf, buflen, datalen); } else { data = NULL; } extpair = palloc(p, sizeof(struct fxp_extpair)); extpair->ext_name = (char *) name; extpair->ext_datalen = datalen; extpair->ext_data = data; return extpair; } ===================== RATIONALE ===================== Part of the SFTP handshake involves "extensions", which are key/value pairs, comprised of strings. In SSH, strings are encoded for network transport as a 32-bit length, followed by the bytes. The mod_sftp module has no manual bounds/length metrics / limitations when reading SFTP extension key/value data from the network. A malicious attacker might attempt to encode large values, and allocate more memory than is necessary, resulting in uncontrollable memory exhaustion / and resource consumption. ======================= CONCLUSION ======================= To avoid undue resource exhaustion by a remote client, mod_sftp should include a patch on the maximum length of acceptable extension keys/values, as reported by our earlier Proftpd report. REPORT TIMELINE ============================== 22/11/2015 Reported to vendor. (Initial Report) [3] 25/11/2015 Second report to vendor. 29/11/2015 Bug Report / Patch circulation. Big thanks to TJ from Proftpd for the prompt response to the issue, and excellent cooperation in security. ============================== ACKNOWLEDGEMENTS ============================== PacketStorm Security TEAM TESO, w00w00, Netric, b0iler (eyeonsecurity), wootehfoot, badpack3t (SP), Vandal (Vic), s0kket, mantis, Big_Al , ELFQrin, bob (dtors), epic, RaT for their ~ legendary mark. ==================== REFERENCES ==================== [1] Proftpd. 2015. Proftpd Bug Report , MOD_SFTP Bug Report. [ONLINE] Available at: http://bugs.proftpd.org/show_bug.cgi?id=4210. [Accessed 29 November 2015]. [2] Lemonias, N. (2015). SecurityFocus - Proftpd Heap Overflow. [ONLINE] Securityfocus.com. Available at: http://www.securityfocus.com/archive/1/536953/30/0/threaded [Accessed 29 November 2015]. [3] Cnvd.org.cn, (2015). China's Emergency Response Team - CERT. [online] Available at: http://www.cnvd.org.cn/flaw/show/CNVD-2015-07798 [Accessed 30 Nov. 2015].