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


ËÄ¡¢½áÊøÓï


´óÊý¾Ýʱ´úÏ £¬´óÁ¿Êý¾Ý¾Û¼¯¡¢Á¬½Ó¼°ÍøÂç½çÏÞµÄÑÓÉ춼ΪÊý¾Ý¿âµÄµÄÄþ¾²Ìá³öÁ˸ü¸ßµÄÒªÇó ¡£Êý¾Ý¿â×÷ΪÐÅÏ¢¼¼ÊõϵͳµÄºËÐĺͻù´¡ £¬³ÐÔØ×ÅÔ½À´Ô½¶àµÄÒªº¦ÒµÎñϵͳ £¬³ÉΪÆóÒµºÍ»ú¹¹×î¾ßÓÐÕ½ÂÔÐԵĺËÐÄÊý¾Ý×ʲú £¬Òò´ËÊý¾Ý¿â·½ÃæµÄÄþ¾²ÖµµÃÎÒÃÇÁ¬Ðø¹Ø×¢ ¡£


²Î¿¼Á´½Ó£º

[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