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