此前蘋果發(fā)布安全公告修復(fù) CVE-2023-41064 和 CVE-2023-4863 漏洞,開源庫漏攻擊者利用該漏洞可以向 iPhone 和 iPad 發(fā)送特制信息,洞影釘QQ等多款都面點網(wǎng)受害者手機或平板只要收到這條信息就會觸發(fā)漏洞,響深信釘險藍(lán)常州高端美女上門外圍上門外圍女(電話微信156-8194-*7106)提供全球及一二線城市兼職美女上門外圍上門外圍女無需用戶進行任何交互,遠(yuǎn)測危害程度極高。試顯示微
根據(jù)調(diào)查該漏洞被商業(yè)間諜軟件公司用來開發(fā)間諜軟件,軟件專門針對一些高價值的臨風(fēng)特定用戶發(fā)起攻擊,背后的開源庫漏目的自然不是為了錢。
事實證明這個漏洞并不只是洞影釘QQ等多款都面點網(wǎng)威脅 iPhone 和 iPad,因為漏洞是響深信釘險藍(lán) WebP 圖像開源庫 libwebp 中的,理論上只要軟件調(diào)用了這個開源庫那么都受影響。遠(yuǎn)測常州高端美女上門外圍上門外圍女(電話微信156-8194-*7106)提供全球及一二線城市兼職美女上門外圍上門外圍女
所以目前 Google Chrome、試顯示微Mozilla Firefox、軟件Microsoft Edge 等瀏覽器均已發(fā)布更新修復(fù)這個漏洞,臨風(fēng)然而還有很多軟件并未修復(fù)。開源庫漏

PoC 概念驗證已經(jīng)被公布:
更糟糕的是目前網(wǎng)上已經(jīng)出現(xiàn)了該漏洞的 PoC,實際上有一些能力的黑客很容易找出漏洞的利用方法,因此只需要制作特定圖片進行投遞即可,盡管不一定可以實現(xiàn)無感攻擊,但想要成功發(fā)起攻擊并不難。
仍然還有不少軟件未更新:
網(wǎng)絡(luò)安全公司 DarkNavy (深藍(lán)) 日前發(fā)布了一篇分析報告,根據(jù)深藍(lán)的測試,國內(nèi)也有很多軟件受該漏洞影響,因為它們也需要調(diào)用 libwebp 開源庫來加載 WebP 圖像。
受影響的包括但不限于微信、釘釘、QQ 等國民級即時通訊 / 協(xié)作類軟件,目前這些軟件都還沒有發(fā)布更新進行修復(fù)。
至于其他用戶量稍微比微信、釘釘、QQ 低一些的類似軟件自然也受該漏洞影響,當(dāng)然除了即時通訊、協(xié)作類軟件,其他能夠發(fā)送和展示圖片的軟件多半也會受這個漏洞影響,只要這些軟件支持 WebP 圖像,那么大概率都是調(diào)用 libwebp 開源庫的。
所以在這里藍(lán)點網(wǎng)也提醒各位近期碰到一些軟件彈出的升級提示一定要及時升級,因為這很有可能就是用來修復(fù)該漏洞的。
尤其是在 PoC 已經(jīng)被公布的情況下,這下會有很多黑客參與進來,到時候就不是針對高價值客戶了,可能普通用戶也會被攻擊。
深藍(lán)表示:
在本案例中,漏洞發(fā)生在一個常用基礎(chǔ)庫中,實際受影響的軟件產(chǎn)品數(shù)量超乎想象,但能及時修復(fù)漏洞的廠商微乎其微。
管中窺豹,與 Chrome、Firefox 等團隊相比,國內(nèi)軟件開發(fā)商在漏洞信息獲取、漏洞研判、漏洞修復(fù)、應(yīng)急響應(yīng)等諸多環(huán)節(jié)存在明顯不足。
只有安全應(yīng)急從被動走向主動,才能讓“安全”更真實。
下面是深藍(lán)關(guān)于該漏洞的技術(shù)分析細(xì)節(jié):
本次漏洞根源,位于 webp 圖片的處理代碼邏輯中。當(dāng)解析一個無損格式的webp圖片時,解碼器采用了范式霍夫曼編碼 (Canonical Huffman Code) 算法,首先從圖片流中讀取前綴編碼的數(shù)據(jù),基于此數(shù)據(jù)構(gòu)建一個完整的霍夫曼編碼表,隨后依照這個編碼表對圖片流中的壓縮數(shù)據(jù)進行解碼,得到原始的圖像。
霍夫曼編碼(Huffman Coding),是一種用于無損數(shù)據(jù)壓縮的熵編碼(權(quán)編碼)算法。
在計算機資料處理中,霍夫曼編碼使用變長編碼表對源符號(如文件中的一個字母)進行編碼。
變長編碼表通過一種評估來源符號出現(xiàn)概率的方法得到,出現(xiàn)概率高的字母使用較短的編碼,反之出現(xiàn)概率低的則使用較長的編碼。
這可以使編碼后的字符串平均長度、期望值降低,從而達(dá)到無損壓縮數(shù)據(jù)的目的。
根據(jù)范式霍夫曼算法,在構(gòu)建一個霍夫曼表時,首先會使用一級表,用于查詢長度小于 N bit (N 默認(rèn)為 8) 的霍夫曼編碼;隨后,若出現(xiàn)了長度超過 N bit 的編碼,解碼器會為其分配二級表,用于查詢超過 N bit 的編碼部分。在分配霍夫曼編碼表的內(nèi)存空間時,解碼器提前會將所有一級表和二級表的空間一并分配出來,其內(nèi)存大小是固定的:
#define FIXED_TABLE_SIZE (630 * 3 + 410)static const uint16_t kTableSize[12] = { FIXED_TABLE_SIZE + 654,FIXED_TABLE_SIZE + 656,FIXED_TABLE_SIZE + 658,FIXED_TABLE_SIZE + 662,FIXED_TABLE_SIZE + 670,FIXED_TABLE_SIZE + 686,FIXED_TABLE_SIZE + 718,FIXED_TABLE_SIZE + 782,FIXED_TABLE_SIZE + 912,FIXED_TABLE_SIZE + 1168,FIXED_TABLE_SIZE + 1680,FIXED_TABLE_SIZE + 2704};const int table_size = kTableSize[color_cache_bits];huffman_tables = (HuffmanCode*)WebPSafeMalloc(num_htree_groups * table_size,sizeof(*huffman_tables));問題在于,解碼器默認(rèn)圖片中保存的霍夫曼編碼表數(shù)據(jù)是合理的,因此提前計算了這一情況下能夠容納的最大內(nèi)存長度。而霍夫曼編碼表數(shù)據(jù)是來自不受信任源的,是可以由攻擊者任意構(gòu)造的,且編碼器不會對這些數(shù)據(jù)進行有效性檢查。
// Fill in 2nd level tables and add pointers to root table.for (len = root_bits + 1, step = 2; len <= MAX_ALLOWED_CODE_LENGTH;++len, step <<= 1) { num_open <<= 1;num_nodes += num_open;num_open -= count[len];if (num_open < 0) { return 0;}if (root_table == NULL) continue;for (; count[len] > 0; --count[len]) { HuffmanCode code;if ((key & mask) != low) { table += table_size;table_bits = NextTableBitSize(count, len, root_bits);table_size = 1 << table_bits;total_size += table_size;low = key & mask;root_table[low].bits = (uint8_t)(table_bits + root_bits);root_table[low].value = (uint16_t)((table - root_table) - low);}code.bits = (uint8_t)(len - root_bits);code.value = (uint16_t)sorted[symbol++];ReplicateValue(&table[key >> root_bits], step, table_size, code); // overflow herekey = GetNextKey(key, len);}}因此,如果攻擊者能夠構(gòu)造出一個非法的霍夫曼表,包含了大量的長編碼,這將導(dǎo)致解碼器將分配過多的二級表,使得霍夫曼表的總內(nèi)存大小超過分配大小,發(fā)生堆緩沖區(qū)溢出。