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Óï¾ä½øÐÐת»»¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


½¨¸´½¨Òé


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


²Î¿¼Á´½Ó


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