Apache HTTP Server mod_luaÄ£¿é»º³åÇøÒç¶Âí½Å·ÖÎö£¨CVE-2021-44790£©

°ä²¼¹¦·ò 2022-01-20

·ì϶¸ÅÊö


2021Äê12ÔÂ20ÈÕ £¬Apache ÍŶӰ䲼ÁËApache HTTP Server 2.4.52°æ±¾ £¬½¨¸´ÁËApache HTTP ServerÖеÄÒ»¸ö»º³åÇøÒç¶Âí½Å£¨CVE-2021-44790£© £¬¸Ã·ì϶´æÔÚÓÚmod_lua½âÎöÆ÷ÖÐ £¬µ±·þÎñÆ÷½âÎö¶ñÒâÒªÇóʱ´¥·¢»º³åÇøÒç³ö £¬¿Éµ¼Ö»ؾø·þÎñ»òÖ´ÐÐËÁÒâ´úÂë¡£


Ó°ÏìÁìÓò


Ó°Ïì°æ±¾£ºApache HTTP Server <= 2.4.51


ÓйؽéÉÜ


Mod_luaÄ£¿é

Mod_luaÄ£¿éÊÇApacheÉϵÄÒ»¸öÀ©´óÄ£¿é £¬ºÏÓÃÓÚ2.3ÒÔÉϰ汾¡£¸ÃÄ£¿éÔÊÐíʹÓÃlua¾ç±¾À©´ó·þÎñÆ÷ £¬»¹Ô̺¬ºÜ¶àÆäËûÄ£¿é¿ÉÓõĹ³×Óº¯Êý¡£ÀýÈ罫ҪÇó Map µ½Îļþ £¬ÌìÉú¶¯Ì¬ÏìÓ¦ £¬½Ó¼û½ÚÔì £¬Éí·ÝÑéÖ¤ºÍÊÚȨµÈ¡£ÈôÊÇ¿ªÆô¸ÃÄ£¿é £¬¿ÉÄÜ»áÔì³ÉһЩ°²È«Òþ»¼¡£

ÔÚ/etc/httpd/httpd.cnfÅäÖÃÎļþÖÐÈ¡µÞÏÂÃæÕâÐÐ×¢½â £¬¼´¿É¿ªÆô¸ÃÄ£¿éµÄÖ°ÄÜ¡£


´úÂëÎļþ.png

µ±ÊÕµ½.luaÎļþÒªÇóʱ £¬mod_luaÄ£¿éŲÓÃlua-scriptµÄhandleº¯Êý½øÐд¦Öá£ÏÂͼΪhandleº¯ÊýÊ·ý¡£


´úÂëÎļþ.png

aprÄÚ´æ³Ø


ΪÁËÏ÷¼õϵͳÄÚ´æ·ÖÅäµÄ¹¦·ò £¬Ìá¸ß·¨Ê½ÔËÐÐЧÄÜ £¬ApacheµÄ¿ª·¢Õß´´½¨ÁËÒ»Ì×»ùÓڳظÅÏëµÄÄÚ´æÖÎÀí¹æ»®¡£ÕâÌײ½ÖèÒÆµ½aprÖгÉΪͨÓõÄÄÚ´æÖÎÀí¹æ»® £¬Ò²¾ÍÊÇaprÄÚ´æ³Ø¡£

aprµÄÄÚ´æ³Ø½á¹¹ÆäʵÊÇÒ»ÖÖÊ÷×´µÄµµ´Î½á¹¹ £¬parentÖ¸Ïòµ±Ç°ÄÚ´æ³ØµÄ¸¸ÄÚ´æ³Ø £¬childÖ¸Ïòµ±Ç°ÄÚ´æ³ØµÄ×ÓÄÚ´æ³Ø £¬siblingÔòÖ¸Ïòµ±Ç°ÄÚ´æ³ØµÄÐÖµÜÄÚ´æ³Ø¡£Óû§Ê¹ÓõÄÄÚ´æ¿Õ¼ä £¬ÔòÊÇactiveÖÎÀíµÄÒ»¸ö½ÚµãÁ´±í¡£Óû§ÒªÉêÇëÄÚ´æ¿Õ¼äµÄʱ³½¾Í»áÔÚactiveÖÎÀíµÄÄÚ´æ½ÚµãÖÐѰÕÒ¡£


½á¹¹ÌåÈçÏÂËùʾ£º


´úÂëÎļþ.png


Óû§ÉêÇëÄÚ´æ¹ý³Ì£º


£¨1£©Ê×ÏÈÈ¡×î¿¿½ü²»Ó×ÓÚ8×Ö½Ú±¶Êý´óÓ׵Ŀռ䣨8×Ö½Ú¶ÔÆë£© £¬¶øºóƾ¾ÝÉêÇë´óÓ×ÅжÏactive½Úµã¿ÉÓÿռäÊÇ·ñ×ã¹»¡£ÈôÄÚ´æ×ã¹» £¬Òƶ¯first_availÖ¸Õë £¬·µ»ØÆäµØÖ·£»Èô¿Õ¼ä²»¼° £¬Ôò³ÖÐø½øÐÐ2Ö®ºóµÄ²½Öè¡£


£¨2£©ÅжÏÏÂÒ»¸öÄÚ´æ½ÚµãµÄÔü×Ò¿Õ¼äÊÇ·ñ×ã¹» £¬Èô×ã¹»ÔòʹÓÃÖ® £¬²¢½«Ö®ÍÑÀ뵱ǰÁ´±í£»Èô²»¼° £¬Ôòͨ¹ý¶ÈÅä×Ó·ÖÅäеÄÄÚ´æ½Úµã¡£


£¨3£©½«µÚ2²½Öеõ½µÄ½Úµã²åÈëactive½Úµã֮ǰ £¬²¢³ÉΪеÄactive½Úµã¡£


£¨4£©ÍÆËã¾ÉµÄactive½ÚµãµÄÔü×Ò¿Õ¼ä´óÓ× £¬²¢ÇÒÓëÆäÁ´±íºóµÄËùÓнڵãµÄÔü×Ò¿Õ¼ä´óÓ×±ÈÁ¦ £¬²¢²åÈëÁ´±íÖÐÕýÈ·µÄµØÎ»¡£


´úÂëÎļþ.png

²¹¶¡·ÖÎö


¸Ã·ì϶ÔÚApache HTTP Server 2.4.52ÖнøÐÐÁ˽¨¸´ £¬ÔÚÄÚ´æÉêÇë֮ǰ £¬Ôö³¤Á˶Գ¤¶ÈµÄºÏ·¨ÐÔУÑé¡£µ±end-crlfÓ×ÓÚµÅ×Ú8 £¬·¨Ê½»áÖ±½ÓÍ˳ö £¬Ô¤·ÀÕûÊýÒç³ö¡£


´úÂëÎļþ.png


·ì϶·ÖÎö


ƾ¾Ý·ì϶²¼¸æ £¬¿ÉÖª·ì϶´æÔÚÓÚmod_luaÄ£¿éÖÐ £¬lua¾ç±¾Å²ÓÃÁËr:parsebody()º¯Êý²úÉúÁË»º³åÇøÒç³ö¡£½áºÏpatchÐÅÏ¢ £¬Ö±½Ó¶¨Î»µ½req_parsebodyº¯Êý¡£

±¾ÎÄʹÓÃApache HTTP Server 2.4.49°æ±¾½øÐзÖÎö £¬´úÂëÖкìÉ«·½¿ò±êʶ³öÀ´µÄ²¿Ãż´·ì϶´úÂëµØÎ» £¬Í¼Æ¬ÖжԹؼü²¿ÃŽøÐÐÁËÏàÓ¦µÄ×¢½â¡£


´úÂëÎļþ.png


ÏÂÃæ½áºÏpostÊý¾Ý°üÀ´·ÖÎö·¨Ê½´¦ÖÃÂß¼­¡£»ú¹ØÈçÏÂpostÊý¾Ý°ü£º


´úÂëÎļþ.png


Ê×ÏÈ £¬start±äÁ¿Ö¸ÏòpostÊý¾Ý°üÆðÍ·µÄµØÎ» £¬Ò²¾ÍÊǶÔÓ¦ÉÏÃæµÚÒ»¸ö±êʶ·û--VILC2R2IHFHLZZµÄµØÎ» £¬crlfÖ¸ÏòÁ½¸ö¿ÕÐУ¨\r\n\r\n£©ÆðÍ·µÄµØÎ» £¬endÖ¸ÏòÏÂÒ»¸ö±êʶ·ûVILC2R2IHFHLZZÆðÍ·µÄµØÎ» £¬ÄÇôÔÚcrlfºÍendÖ®¼äµÄÊý¾Ý¾ÍÓÐÏÂÃæÕâЩÄÚÈÝ £¬×ܳ¤¶ÈΪ8£¨ÌØÊâ×Ö·û³¤¶È£©+len£¨Êý¾Ý²ÎÊý³¤¶È£©¸ö×Ö½Ú¡£


¡®\r\n\r\ntest\r\n--¡¯

ƾ¾ÝÉÏÃæ²ÎÊýÄÚÈÝ £¬ÎÒÃǾÍÄܹ»Àí½âÏÂÃæÕâÐдúÂëµÄÒâ˼ÁË¡£vlenµÅ×Ú×ܳ¤¶È¼õÈ¥ÓÐÓàµÄ8¸öÌØÊâ×Ö·û £¬¾ÍÄܹ»ÍÆËã³ö²ÎÊýµÄ³¤¶È¡£


vlen=end-crlf-8;


¶øºó £¬·¨Ê½Å²ÓÃapr_pcalloc·ÖÅäÄÚ´æ¡£


´úÂëÎļþ.png


·¨Ê½Ã»ÓжÔvlenÖµµÄºÏ·¨ÐÔ½øÐв鳭 £¬ÈôÊÇÉÏÃæ²ÎÊýÖеÄÌØÊâ×Ö·ûȱʧ £¬ÍÆËãµÄvlenÖµ¾Í¿ÉÄܱäΪ¸ºÊý £¬Ôì³ÉÕûÊýÒç³ö¡£µ±ÉêÇë¿Õ¼äµÄʱ³½ £¬»á³öÏÖ°²È«ÎÊÌâ¡£



¶¯Ì¬µ÷ÊÔ


ƾ¾Ý·ÖÆç»ûÐΰüµÄ»ú¹Ø £¬Ë¼¿¼ÒÔÏÂÁ½ÖÖÇé¿ö £¬½áºÏ¶¯Ì¬µ÷ÊÔ½øÐзÖÎö¡£

ÉêÇ볬´óµÄ¿Õ¼ä

Èç¹ûȱʧ'/r/n--'Õâ4¸öÌØÊâ×Ö·û £¬ÇÒÊý¾Ý²¿ÃÅΪ2×Ö½Ú £¬vlen=(2+4-8)=-2¡£Å²ÓÃapr_pcalloc(r->pool, vlen+1)ÉêÇëÄÚ´æÊ± £¬vlen+1=0xffffffffffffffff¡£

ʹÓÃgdb¸½¼Ó¹ý³Ì £¬½øÐж¯Ì¬µ÷ÊÔ¡£ÔÚ·ì϶º¯Êý´¦ÉèÖöϵã £¬¶øºó·¢ËÍÌØÊâµÄpostÒªÇó¡£


´úÂëÎļþ.png


aprÄÚ´æ³ØÎÞ·¨ÌṩÕâô´óµÄÄÚ´æ £¬ÕâʱaprµÄ·ÖÅä×ӾͻáÏòϵͳÉêÇëÄÚ´æ¿Õ¼ä £¬µ«ÊÇÉêÇëµÄ¾Þ´óÄÚ´æ¿Õ¼äÊÇϵͳÎÞ·¨ÌṩµÄ £¬ËùÒÔϵͳ»áÖ±½Ó½«¹ý³Ìkillµô£¨0x75Êǹý³ÌºÅ£© £¬Ôì³É»Ø¾ø·þÎñ¡£

´úÂëÎļþ.png


Òç³ö³¬³¤µÄ×Ö½Ú

Èç¹ûȱʧ'/r/n--'Õâ4¸öÌØÊâ×Ö·û £¬ÇÒÊý¾Ý²¿ÃÅΪ3×Ö½Ú £¬vlen=(3+4-8)=-1 £¬Å²ÓÃapr_pcalloc(r->pool, vlen+1)ÉêÇëÄÚ´æÊ± £¬³¤¶Èvlen+1=0 £¬Æ¾¾ÝaprÄÚ´æ³ØÄÚ´æ·ÖÅä»úÔì £¬aprÄÚ´æ³Ø»á·ÖÅä×îÓ×µÄÄÚ´æ¿é8×Ö½Ú £¬×îºóʹÓú¯ÊýmemcpyµÄʱ³½£º


memcpy(buffer, crlf + 4, vlen)

vlenÓÖΪFFFFFFFF.......(-1) £¬¾Í»á²úÉú»º³åÇøÒç³ö¡£

¶¯Ì¬µ÷ÊÔʱÄܹ»¿´µ½Å²ÓÃapr_pallocʱ £¬³¤¶È²ÎÊýÊÇ0 £¬ÏÖʵÉÏ»á·ÖÅä8×ֽڵĿռä¡£



´úÂëÎļþ.png


´úÂëÎļþ.png


²Î¿¼Á´½Ó£º


[1]https://mp.weixin.qq.com/s/XLzXHZYvpPIqNrDz3OHaMA


[2]https://nakedsecurity.sophos.com/2021/12/21/apaches-other-product-critical-bugs-in-httpd-web-server-patch-now/


[3]https://httpd.apache.org/security/vulnerabilities_24.html 


[4]https://ubuntu.com/security/CVE-2021-44790


[5]https://github.com/apache/httpd/commit/07b9768cef6a224d256358c404c6ed5622d8acce