ClickHouse¶à¸ö·ì϶µÀÀí·ÖÎö

°ä²¼¹¦·ò 2022-03-21

Ò»¡¢·ì϶¸ÅÊö


ClickHouseÊǶíÂÞ˹yandex¹«Ë¾ÓÚ2016Ä꿪ԴµÄÔÆÊý¾Ý¿âÖÎÀíϵͳ £¬£¬£¬ClickHouse¿í·ºÀûÓÃÓÚÔÆÆ½Ì¨µÄ´óÊý¾Ý·ÖÎöÀûÓÃÖÐ £¬£¬£¬ÆäÓû§Ô̺¬uber¡¢ebay¡¢µÂÒâÖ¾ÒøÐС¢°¢Àï°Í°Í¡¢ÌÚѶµÈ¡£¡£¡£


½üÈÕ £¬£¬£¬JFrog°²È«×êÑÐÍŶÓÅû¶ÁËÔÚClickHouse DBMSÖз¢ÏÖµÄ7¸ö·ì϶ £¬£¬£¬Õ¼ÓÐClickHouse×îµÍȨÏ޵Ĺ¥»÷ÕßÄܹ»Í¨¹ýÕâЩ·ì϶ʹClickHouse·þÎñÆ÷±ÀÀ£¡£¡£¡¢Ð¹Â©ÄÚ´æÄÚÈÝ £¬£¬£¬ÉõÖÁµ¼ÖÂÔ¶³Ì´úÂëÖ´ÐУ¨RCE£©¡£¡£¡£

·ì϶ӰÏìÁËClickHouse 21.10.2.15°æ±¾Ö®Ç°µÄËùÓа汾¡£¡£¡£¾ßÌå·ì϶ÃèÊöÈçϱíËùʾ£º


ͼƬ1.png


¶þ¡¢´ëÖý¨Òé


2021Äê10ÔÂ18ÈÕ°ä²¼µÄClickHouse 21.10.2.15°æ±¾ÐÞ¸´ÁËÉÏÊöµÄ7¸ö·ì϶ £¬£¬£¬Ç뾡¿ìÉý¼¶µ½ClickHouse 21.10.2.15¼°ÒÔÀ´µÄ°æ±¾¡£¡£¡£


ÏÂÔØÁ´½Ó£º

https://github.com/ClickHouse/ClickHouse/releases/


»º½â´ëÊ©£º

ÈôÊÇÎÞ·¨Éý¼¶ £¬£¬£¬ÇëÔÚ·þÎñÆ÷ÖÐÔö³¤·À»ðǽսÊõ £¬£¬£¬ÏÞ¶ÈÖ»ÔÊÐíÌØ¶¨IPµÄ¿Í»§¶Ë½Ó¼ûWEB¶Ë¿Ú(8123)ºÍTCP·þÎñÆ÷¶Ë¿Ú(9000)¡£¡£¡£


Èý¡¢·ì϶·ÖÎö


ÕâЩ·ì϶¶¼´æÔÚClickHouse Server´¦ÖÃѹËõÊý¾ÝµÄÒªÇó´¦Öùý³ÌÖÐ £¬£¬£¬ClickHouse ServerÖ§³Ö¶ÔÓû§ÒªÇóµÄ¸½´øÊý¾Ý½øÐÐѹËõ¡£¡£¡£Óû§Äܹ»ÔÚÌáÒéWEBÒªÇóʱ £¬£¬£¬½«decompress±êÖ¾ÉèΪ1¼´¿É £¬£¬£¬¾ÙÀýÈçÏ£º

cat query.bin | curl -sS ¡ªdata-binary @-¡®http://serverIP:8123/?user=xxx&password=xxx&decompress=1' 

²éÎʵĸ½´øÊý¾Ý(query.bin)Äܹ»°´ÏÂÃæµÄ½á¹¹½øÐÐ×éÖ¯£º


ͼƬ2.png


ClickHouseÖ§³Ö¶àÖÖѹËõÌåʽ £¬£¬£¬Ô̺¬LZ4¡¢Gorilla¡¢DeltaµÈ¶àÖÖѹËõËã·¨¡£¡£¡£ClickHouse Serverƾ¾ÝÒªÇóÖи½´øÊý¾ÝµÄѹËõËã·¨±êʶ £¬£¬£¬Å²ÓÃ·ÖÆçµÄ½âѹËã·¨À´¶ÔÊý¾Ý½øÐнâѹ¡£¡£¡£


3.1 LZ4Ëã·¨½éÉÜ


LZ4ѹËõËã·¨ÊÇLZË㷨ϵÁÐÖеÄÒ»ÖÖ £¬£¬£¬Ò²ÊÇĿǰ×ÛºÏЧÄÜ×î¿ìµÄѹËõËã·¨Ö®Ò»¡£¡£¡£

Ò»¸öLZ4ѹËõ¿éÓɶà¸öLZ4ÐòÁÐ×é³É £¬£¬£¬LZ4ÐòÁÐÓÉÒÔÏÂÊý¾Ý×é³É £¬£¬£¬ÈçÏÂͼËùʾ£º


ͼƬ3.png

Token¾ÞϸΪ1×Ö½Ú £¬£¬£¬¸ß4¸öbitsΪ²»³ÉѹËõÊý¾Ý(literal£©µÄ³¤¶È(literallength) £¬£¬£¬¶øµÍ4¸öbitsΪÄܹ»Ñ¹ËõÊý¾Ý(match)³¤¶È(match length)¡£¡£¡£ÈôÊÇliterallengthµÄֵΪ0 £¬£¬£¬Ôò°µÊ¾ºóÐøÊý¾ÝÀïûÓÐliteral¡£¡£¡£ÓÉÓÚliteral lengthÖ»ÓÐ4±ÈÌØÀ´°µÊ¾ £¬£¬£¬ËüµÄ×î´óֵΪ15¡£¡£¡£µ±literalÊý¾ÝµÄ¾Þϸ´óÓÚµÈÓÚ15ʱ £¬£¬£¬±ØÒªÔÚToken×ֶκóÔö³¤¸ñÍâµÄ×Ö½ÚÀ´°µÊ¾literalµÄ³¤¶È£¨Literal length+£©¡£¡£¡£


ÈôÊÇmatch lengthµÄֵΪ0 £¬£¬£¬Ôò°µÊ¾ºóÐøÊý¾ÝÀïûÓÐmatch¡£¡£¡£ÓÉÓÚmatchlengthÖ»ÓÐ4±ÈÌØÀ´°µÊ¾ £¬£¬£¬ËüµÄ×î´óֵΪ15¡£¡£¡£µ±matchÊý¾ÝµÄ¾Þϸ´óÓÚµÈÓÚ15ʱ £¬£¬£¬±ØÒªÔÚoffset×ֶκóÔö³¤¸ñÍâµÄ×Ö½ÚÀ´°µÊ¾matchµÄ³¤¶È£¨match length+£©¡£¡£¡£

LiteralsָûÓз´¸´¡¢³õ´Î³öÏÖµÄ×Ö½ÚÁ÷ £¬£¬£¬¼´²»³ÉѹËõµÄ²¿ÃÅ¡£¡£¡£

OffsetÖ¸µÄÊÇ´Ë¿Ì×Ö·û´®ÀëËüµÄÆ¥ÅäÏîµÄ³¤¶È £¬£¬£¬¶øÆ¥Å䳤¶ÈÖ¸µÄÊÇ´Ë¿Ì×Ö·û´®Óë×ÖµäÖÐÒ»Ñù×Ö·û´®µÄÆ¥Å䳤¶È¡£¡£¡£offsetÕ¼ÓÃ2¸ö×Ö½Ú £¬£¬£¬¼´×î´óֵΪ65535¡£¡£¡£

MatchÖ¸·´¸´Ïî £¬£¬£¬Äܹ»Ñ¹ËõµÄ²¿ÃÅ¡£¡£¡£


 3.2 CVE-2021-43304µÀÀí

src/Compression/LZ4_decompress_faster.cppµÄdecompressImplº¯ÊýÔÚ¿½±´LZ4ÐòÁÐÊý¾ÝµÄliteralʱ £¬£¬£¬Ã»ÓÐÅжϸ´ÖƵÄÊý¾ÝÊÇ·ñ³¬¹ýÖ¸±ê»º³åÇøµÄÏÞ¶È¡£¡£¡£µ±±ØÒª¸´ÖƵÄÊý¾Ý³¬¹ýÖ¸±ê»º´æµÄ¾Þϸʱ £¬£¬£¬»áµ¼Ö¶ÑÒç³ö¡£¡£¡£


ͼƬ4.png


ÈçÉÏͼ´úÂëËùʾ £¬£¬£¬ipÊÇÖ¸ÏòѹËõ»º³åÇøµÄÖ¸Õë¡£¡£¡£opÊÇÖ¸Ïò·ÖÅäµÄÖ¸±ê»º³åÇøµÄÖ¸Õë £¬£¬£¬¸ÃÖ¸±ê»º³åÇøµÄ¾ÞϸΪ±¨Í·Öиø¶¨µÄ½âѹ¾Þϸ¡£¡£¡£copy_endÊÇÖ¸Ïò¸´ÖÆÇøÓò½áβµÄÖ¸Õë¡£¡£¡£


copy_amountÊÇÄ£°åµÄ²ÎÊý £¬£¬£¬¿ÉËùÒÔ8¡¢16»ò32¡£¡£¡£¸´ÖÆÇøÓò±»·Ö¿é¸´ÖÆ £¬£¬£¬Ã¿¸ö¿éµÄ¾Þϸ¶¼Óë¸´ÖÆÁ¿Ò»Ñù¡£¡£¡£

¹¥»÷ÕßÄܹ»»ú¹Ø¶ñÒâµÄLZ4ÐòÁÐÊý¾Ý £¬£¬£¬ÆäÖÐliteraµÄ³¤¶È(length±äÁ¿)´óÓÚdest_size £¬£¬£¬½«µ¼Ö¶ÑÒç³ö¡£¡£¡£


3.3 CVE-2021-43304·ì϶¸´ÏÖ

ÎÒÃÇÄܹ»»ú¹ØÕâÑùµÄÒªÇóÊý¾Ý £¬£¬£¬ÆäÖÐѹËõË㷨ΪLZ4 £¬£¬£¬literalµÄ³¤¶ÈΪ255*200 £¬£¬£¬¶ødest_sizeΪ1¡£¡£¡£ÓÉÓÚliteralµÄ¾ÞϸºëÔ¶ÓÚ½âѹºó»º³åÇøµÄ¾Þϸ £¬£¬£¬µ±clickhouse_server½øÐи´ÖƲÙ×÷ʱ½«µ¼Ö¶ÑÒç³ö £¬£¬£¬´¥·¢·¨Ê½±ÀÀ£¡£¡£¡£


ͼƬ5.png


3.4 CVE-2021-43305·ì϶µÀÀí


·ì϶´æÔÚsrc/Compression/LZ4_decompress_faster.cppµÄdecompressImplº¯ÊýÖÐ £¬£¬£¬¸Ãº¯ÊýÖ±½Ó´ÓLZ4ѹËõÊý¾ÝÖжÁÈ¡16λÎÞ·ûºÅÆ«ÒÆÁ¿£¨offset¹¥»÷ÕßÄܹ»½ÚÖÆ£© £¬£¬£¬offsetÓÃÓÚ¶¨Î»matchÊý¾ÝµÄµØÎ» £¬£¬£¬µ±offsetµÄÖµ´óÓÚdest_sizeµÄֵʱ £¬£¬£¬copyOverlap²Ù×÷½«µ¼Ö¶ÑÒç³ö¡£¡£¡£


ͼƬ6.png


3.5 CVE-2021-42388¼°CVE-2021-42387·ì϶µÀÀí


·ì϶´æÔÚsrc/Compression/LZ4_decompress_faster.cppµÄdecompressImplº¯ÊýÖÐ £¬£¬£¬¸Ãº¯ÊýÖ±½Ó´ÓLZ4ѹËõÊý¾ÝÖжÁÈ¡16λÎÞ·ûºÅÆ«ÒÆÁ¿£¨offset¹¥»÷ÕßÄܹ»½ÚÖÆ£©,¸ÃÆ«ÒÆÁ¿ÓÃÓÚÍÆËãwildCopy²Ù×÷µÄÔ´Êý¾ÝµØÖ·¡£¡£¡£µ±offsetµÄֵΪ´óÓÚcopy_amountʱ(Èçoffset = 0xffff£© £¬£¬£¬½«µ¼Ö·¨Ê½½«opµØÖ·Ö®Ç°µÄÊý¾Ý¿½±´µ½opÖ¸ÏòµÄµØÖ·ÖÐ £¬£¬£¬´Ó¶øµ¼ÖÂÔ½½ç¶Á¡£¡£¡£


ͼƬ7.png


CVE-2021-42387ÊÇCVE-2021-42388µÄÒ»¸öÀàËÆ·ì϶ £¬£¬£¬ÕâÀï¾Í²»ÔÙ½éÉÜ¡£¡£¡£


3.6 CVE-2021-42389¡¢CVE-2021-42390¡¢CVE-2021-42391·ì϶µÀÀí

ClickHouseÖ§³ÖµÄDoubleDelta±à½âÂëÆ÷¡¢Delta±à½âÂëÆ÷¡¢Gorilla±à½âÂëÆ÷Öж¼´æÔÚ±»Áã³ýµÄ·ì϶¡£¡£¡£ËüÃÇ»ùÓÚ½«Ñ¹Ëõ»º³åÇøµÄµÚÒ»¸ö×Ö½ÚÉèÖÃΪÁã¡£¡£¡£½âѹ´úÂë¶ÁȡѹËõ»º³åÇøµÄµÚÒ»¸ö×Ö½Ú £¬£¬£¬²¢¶ÔÆäÖ´ÐÐÄ£ÔËËãÒÔ»ñµÃÔü×Ò×Ö½Ú £¬£¬£¬µ±source[0]Ϊ0ʱ £¬£¬£¬CPU¶Ô0½øÐÐȡģʱ²Ù×÷½«²úÉú³ý0Òì³£¡£¡£¡£


ͼƬ8.png


ËÄ¡¢ÊµÏÖÓï


´óÊý¾ÝʱÆÚÏ £¬£¬£¬´óÁ¿Êý¾ÝÜöÝÍ¡¢ÏνӼ°ÍøÂçÌìǵµÄÑÓ³¤¶¼ÎªÊý¾Ý¿âµÄµÄ°²È«Ìá³öÁ˸ü¸ßµÄÒªÇ󡣡£¡£Êý¾Ý¿â×÷ΪÐÅÏ¢¼¼ÊõϵͳµÄÖ÷ÌâºÍ»ù´¡ £¬£¬£¬³ÐÔØ×ÅÔ½À´Ô½¶àµÄ¹Ø¼üÒµÎñϵͳ £¬£¬£¬³ÉΪÆóÒµºÍ»ú¹¹×îÓµÓÐÕ½ÊõÐÔµÄÖ÷ÌâÊý¾Ý×ʲú £¬£¬£¬Òò¶øÊý¾Ý¿â·½ÃæµÄ°²È«ÖµµÃÎÒÃdzÖÐø¹Ø×¢¡£¡£¡£


²Î¿¼Á´½Ó£º

[1]https://jfrog.com/blog/7-rce-and-dos-vulnerabilities-found-in-clickhouse-dbms/

[2]https://github.com/ClickHouse/ClickHouse

[3]https://thehackernews.com/2022/03/multiple-flaws-uncovered-in-clickhouse.html