SQLite Ô¶³Ì´úÂëÖ´ÐЩ¶´£¨CVE-2019-5018£©

Ðû²¼Ê±¼ä 2019-05-11

01Åä¾°ÃèÊö



SQLite 3.28.0ÐÞ¸´ÁËÓÉ˼¿ÆTalos·¢ÏÖ²¢³ÂËßµÄÔ¶³Ì´úÂëÖ´ÐЩ¶´£¨CVE-2019-5018£©¡£


02Ó°Ï췶Χ



CVE ID  £º   CVE-2019-5018    
©¶´Æ·¼¶£º   ¸ßΣ
Ó°Ï췶Χ£º   SQLite 3.26.0¡¢3.27.0
CVSSÆÀ·Ö£º   8.1


03©¶´ÏêÇé



SQLite 3.26.0µÄ´°¿Úº¯ÊýÖдæÔڿɱ»ÀûÓõÄuse-after-free©¶´ £¬¹¥»÷Õß¿Éͨ¹ý·¢ËͶñÒâSQLÃüÁîÀ´´¥·¢´Ë©¶´ £¬µ¼ÖÂÔ¶³Ì´úÂëÖ´ÐС£


¾ßÌåϸ½ÚΪ £¬SQLiteÔÚ¶Ô°üÂÞ´°¿Úº¯ÊýµÄSELECTÓï¾ä½øÐнâÎöºó £¬Ê¹ÓÃsqlite3WindowRewriteº¯Êý¶Ô¸ÃSELECTÓï¾ä½øÐÐת»»¡£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Ôڴ˺¯ÊýÖÐ £¬Èç¹û¸ÃSELECTÓï¾ä°üÂ޾ۺϺ¯Êý£¨COUNT £¬MAX £¬MIN £¬AVG £¬SUM£© £¬ÔòÖØдSELECT¹¤¾ßÉú´æµÄ±í´ïʽÁÐ±í£¨ÏÂͼÖеÚ[0]ÐУ©¡£

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Ö÷´°¿Ú¹¤¾ßpMWinÈ¡×ÔSELECT¹¤¾ß £¬²¢ÔÚÖØдÆڼ䱻ʹÓÃ[1]¡£±éÀúSELECT¹¤¾ßµÄ±í´ïʽÁбí £¬ÖØд´°¿Úº¯ÊýÒÔ±ãÓÚ´¦Öá£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


×¢ÒâÖ÷´°¿Ú¹¤¾ßÔÚWindowRewrite¹¤¾ßÖÐʹÓá£ÔÚÑ­»·´¦ÖÃÿһ¸ö±í´ïʽʱ £¬½«xExprCallbackº¯Êý×÷Ϊ»Øµ÷º¯Êý¡£µ±´¦ÖþۺϺ¯Êý£¨TK AGG FUNCTION£©ºó £¬±í´ïʽ±»É¾³ý[2]¡£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


Èç¹û±»É¾³ýµÄ±í´ïʽ±»±ê־Ϊ´°¿Úº¯Êý £¬ÔòÒ²»áɾ³ý¹ØÁªµÄWindow¹¤¾ß¡£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


²¢É¾³ý¸ÃWindow¹¤¾ß¹ØÁªµÄ·ÖÇø¡£

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


»Ø¹Ë³õʼµÄsqlite3WindowRewriteº¯Êý £¬·¢Ïָú¯ÊýÔÚÖØд±í´ïʽÁбí[4]Ö®ºóͨ¹ýexprListAppendListÖØÓÃÕâ¸ö±»É¾³ýµÄ·ÖÇø[5] £¬´Ó¶øµ¼ÖÂuse-after-freeºÍ¾Ü¾ø·þÎñ¡£Èç¹û¹¥»÷Õß¿ÉÒÔ¿ØÖÆfreeºóµÄÄÚ´æ £¬Ôò¿ÉÄÜÆÆ»µ¸ü¶àÊý¾Ý £¬´Ó¶øµ¼Ö´úÂëÖ´ÐС£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


¿ÉÒÔʹÓÃDebug°æ±¾µÄsqlite3ÏÈÇå¿Õ±»freeµÄ»º³åÇøµÄÄÚÈÝ £¬ÒÔ¸üºÃµØ½øÐÐÑÝʾ[5]¡£


¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ͨ¹ýgdb sqlite3ÔËÐÐPoC £¬¿ÉÊӲ쵽0xfafafafafafafafaËÄÖÜ·¢ÉúÍ߽⠣¬ÕâÒâζ×ŶÔÒÑÊͷŵĻº³åÇøµÄÔٴηÃÎÊ£º

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


ʹÓÃsqlite3 shell ÔËÐÐPoC£º

¶«É­¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


04ÐÞ¸´½¨Òé



´Ë©¶´ÒÑÔÚSQLite 3.28.0ÖÐÐÞ¸´¡£


05²Î¿¼Á´½Ó



https://blog.talosintelligence.com/2019/05/vulnerability-spotlight-remote-code.html
https://www.sqlite.org/src/info/884b4b7e502b4e99