SQLite Ô¶³Ì´úÂëÖ´Ðзì϶°²È«¹«¸æ

°ä²¼¹¦·ò 2019-05-13

·ì϶±àºÅºÍ¼¶±ð


CVE±àºÅ£º£º£ºCVE-2019-5018£¬£¬Î£ÏÕ¼¶±ð£º£º£º¸ß¼¶£¬£¬CVSS·ÖÖµ£º£º£º³§ÉÌ×ÔÆÀ£º£º£º8.1£¬£¬¹Ù·½Î´ÆÀ¶¨


Ó°Ïì°æ±¾

SQLite 3.26.0¡¢¡¢3.27.0


·ì϶¸ÅÊö


SQLiteÊÇÒ»¿îÊ¢ÐеÄSQLÊý¾Ý¿âÒýÇæ£¬£¬ÓµÓÐСÐÍ£¬£¬¼±¾ç£¬£¬¿¿µÃסµÄÌØµã£¬£¬¿í·ºÓÃÓÚÒÆ¶¯É豸£¬£¬ä¯ÀÀÆ÷£¬£¬Ó²¼þÉ豸ÒÔ¼°Óû§ÀûÓ÷¨Ê½¡£


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


·ì϶ÑéÖ¤


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


OG¶«·½Ìü¡¤(Öйú´ó½)


Ôڴ˺¯ÊýÖУ¬£¬ÈôÊǸÃSELECTÓï¾äÔ̺¬¾ÛºÏº¯Êý£¨COUNT£¬£¬MAX£¬£¬MIN£¬£¬AVG£¬£¬SUM£©£¬£¬ÔòÖØÐ´SELECT¶ÔÏó±£ÁôµÄ±í°×ʽÁÐ±í£¨ÏÂͼÖеÚ[0]ÐУ©¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


Ö÷´°¿Ú¶ÔÏópMWinÈ¡×ÔSELECT¶ÔÏ󣬣¬²¢ÔÚÖØÐ´ÆÚ¼ä±»Ê¹ÓÃ[1]¡£±éÀúSELECT¶ÔÏóµÄ±í°×ʽÁбí£¬£¬ÖØÐ´´°¿Úº¯ÊýÒÔ±ãÓÚ´¦Öá£


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


ÈôÊDZ»É¾³ýµÄ±í°×ʽ±»ÏóÕ÷Ϊ´°¿Úº¯Êý£¬£¬ÔòÒ²»áɾ³ý¹ØÁªµÄWindow¶ÔÏó¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


²¢É¾³ý¸ÃWindow¶ÔÏó¹ØÁªµÄ·ÖÇø¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


»ØÊ׳õʼµÄsqlite3WindowRewriteº¯Êý£¬£¬·¢Ïָú¯ÊýÔÚÖØÐ´±í°×ʽÁбí[4]Ö®ºóͨ¹ýexprListAppendListÖØÓÃÕâ¸ö±»É¾³ýµÄ·ÖÇø[5]£¬£¬´Ó¶øµ¼ÖÂuse-after-freeºÍ»Ø¾ø·þÎñ¡£ÈôÊǹ¥»÷ÕßÄܹ»½ÚÖÆfreeºóµÄÄڴ棬£¬Ôò¿ÉÄÜ·ÛËé¸üÎÞÊý¾Ý£¬£¬´Ó¶øµ¼Ö´úÂëÖ´ÐС£


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


ͨ¹ýgdb sqlite3ÔËÐÐPoC£¬£¬¿É¹Û²ìµ½0xfafafafafafafafa×ó½ü²úÉú±ÀÀ££¬£¬ÕâÒâζ×ŶÔÒÑ¿ªÊ͵Ļº³åÇøµÄÔٴνӼû£º£º£º


OG¶«·½Ìü¡¤(Öйú´ó½)


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


OG¶«·½Ìü¡¤(Öйú´ó½)


ÐÞ¸´½¨Òé


ĿǰSQLite³§ÉÌÕë¶Ô¸Ã·ì϶°ä²¼ÁË·ì϶²¹¶¡£¬£¬Çë¸üÐÂÖÁSQLite3 3.28.0£º£º£ºhttps://www.sqlite.org/src/info/69bad9257f8db6a2¡£


²Î¿¼Á´½Ó


https://www.talosintelligence.com/vulnerability_reports/TALOS-2019-0777/