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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


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


GA»Æ½ð¼×¡¤(ÖйúÇø)¹Ù·½ÍøÕ¾


½¨¸´½¨Òé


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


²Î¿¼Á´½Ó


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