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