拓冰建站拓冰建站
首页 / 资讯中心 / 正文

claude-obsidian 归档安全全拆解:从符号链接到并发锁,攻击者被挡在哪

claude-obsidian 归档安全全拆解从符号链接到并发锁攻击者被挡在哪【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidianclaude-obsidian 是一个把任意来源资料归档进 Obsidian Markdown 知识库的 AI 第二大脑工具。攻击者往 inbox 丢一个名为../../etc/passwd的文件、或一个指向/etc的符号链接时归档入口会怎样它的归档安全体系用一组确定性错误码回答这个问题。 威胁全景——它到底在防什么归档入口直接吞下用户放进收件箱的任何文件威胁面比一般笔记工具大得多威胁类别失守后果一句话路径越界归档写入逃出知识库落到系统任意位置符号链接劫持合法路径名指向库外读写的内容被偷换命名混淆大小写别名骗过校验或文件名在 Windows 上直接损坏资源耗尽文件炸弹占满磁盘海量小文件挂死归档队列内容篡改内容寻址旧副本被偷换归档历史被改写并发竞态锁被偷、回滚目标被换多进程同时写坏状态下面按威胁类别展开看每一类攻击是怎么被确定性拦截的。 符号链接为什么必须逐段检查到中间目录符号链接是本地文件安全的第一大敌claude-obsidian 对归档路径上的每一个链接都零容忍。检查根目录打开前先看目录本身是什么检查对象inbox 与.raw原始仓库的根目录。实现方式discover_files先对源根做is_symlink()是链接就直接拒绝。失败错误码SOURCE_ROOT_SYMLINK。检查路径每一段防止中间目录被换掉检查对象源文件从根到叶的每一个中间目录。实现方式_allowed_source_path沿相对路径逐段is_symlink()源文件没问题也不行只要穿过了别名目录进入收件箱就拦截。失败错误码SOURCE_SYMLINK、SOURCE_OUTSIDE_INBOX。检查事务写入路径覆盖 Windows 连接点检查对象每个拟写入路径的每一段含 Windows 的 junction/mount pointPOSIX 上表现为普通目录、但会重定向名称查找的对象。实现方式_safe_vault_path对每段lstat用is_name_surrogate同时识别符号链接与重解析点。失败错误码SYMLINK_WRITE_PATH。如果跳过逐段检查攻击者只需在收件箱里放一个指向系统目录的别名文件夹合法文件名的读取就会落到库外——这个设计很聪明它盯住的是路径经过的位置而不只是终点在哪。 路径越界双重包含校验与文件名卫生如何挡住穿越词法校验管看起来合法文件系统校验管实际落在哪两道都过才放行。检查词法形态拒绝未规范化的路径检查对象归档配置的相对目录与事务写入路径。实现方式_validate_relative_directory与_normalize_vault_path拒绝绝对路径、反斜杠、..段、控制字符并要求 NFC 归一化。失败错误码INVALID_CONFIG_PATH、INVALID_WRITE_PATH、NONCANONICAL_WRITE_PATH。检查真实落点resolve 之后还要在库内检查对象词法合法但可能经符号链接越界的路径。实现方式assert_within用Path.resolve解析符号链接后确认最终位置仍在库根之下。失败错误码PATH_OUTSIDE_VAULT。检查文件名控制字符与保留名一次拦完检查对象源文件名本身。实现方式_validate_filename拒绝控制/格式字符含零宽字符、首尾空格、点或空格结尾、Windows 保留名CON、NUL等且限长 240 字节。失败错误码UNSAFE_FILENAME。如果只做词法校验a/b.md里那个a可以是指向别处的符号链接如果跳过文件名卫生含换行或零宽字符的名字会在不同平台渲染成两个文件。两道防线各管一层缺一不可。 资源耗尽预算为什么必须挡在 IO 之前归档批次在进入任何磁盘操作前先过一道硬预算。检查批次数与总字节检查对象单批文件数、单文件字节数、整批字节数。实现方式CaptureBudget默认单批最多 100 个文件、单文件 64 MB、整批 256 MB_preflight_sources在复制前逐文件核对。失败错误码COUNT_BUDGET_EXCEEDED、FILE_BUDGET_EXCEEDED、TOTAL_BUDGET_EXCEEDED。检查队列文档限制同样存在检查对象捕获队列文档的体积与条数。实现方式队列写入前做大小限制超限即拒绝避免巨型队列文档拖垮后续所有操作具体阈值与实现细节见 claude_obsidian/capture.py。失败错误码QUEUE_VALUE_INVALID等确定性代码。预算是失败即中止而非建议值。如果这一层被跳过攻击者只要投一个 10 GB 的文件或一万个 1 字节文件就能让归档进程要么写爆磁盘、要么在枚举中挂死——而这里它连一个字节都不会碰。 内容篡改旧副本为什么必须逐字节重验归档把源文件复制成SHA-256 摘要.扩展名存入.raw/captured/这个内容寻址用文件内容的哈希值直接作为文件名设计自带两层防篡改。计算身份指纹读前读后比对文件状态检查对象源文件在计算哈希期间的 inode、大小、修改时间。实现方式source_identity用O_NOFOLLOW打开、分块计算 SHA-256前后各 stat 一次比对签名。失败错误码SOURCE_CHANGED。重验同摘要旧副本名字对、内容不对就是事故检查对象.raw/captured/里已存在的同摘要文件。实现方式_find_existing_capture发现同名旧副本后重新计算其哈希不一致即判定仓库被外部改写。失败错误码IMMUTABLE_SOURCE_CONFLICT。原始资料区因此是只创建、永不修改的。如果跳过重验攻击者可以在两次归档之间悄悄替换某个摘要.md的字节让所有引用它的笔记出处全部失真——而摘要就在文件名里任何一次重算都会当场揭穿。⚡ 并发锁的所有权为什么必须在释放前回读验证多进程同时动同一个库时光有锁不够锁本身也可能被偷。检查锁的所有权owner 令牌回读检查对象目录型锁的持有者身份。实现方式CaptureQueueLock原子创建锁目录持有者写入含pid、主机名、随机 token 的 owner.json释放前回读验证 token 未变。失败错误码QUEUE_LOCK_OWNERSHIP_LOST。检查回滚目标字节必须还是回滚前的字节检查对象事务回滚时要还原的每个目标文件。实现方式transaction.py 为每个写入记录预期哈希回滚时逐字节验证目标未被替换见 claude_obsidian/transaction.py。失败错误码ROLLBACK_TARGET_CHANGED。所有冲突都归入CaptureConflict错误家族而不是静默失败。如果跳过 token 回读另一个进程删除并重建锁目录后就能合法接管队列两个进程同时写同一批笔记——回读验证让这个窗口直接变成报错。️ 容易被忽略的两个角落大小写别名很多人以为名字不同就不冲突实际上在 Windows 这类不区分大小写的文件系统上Note.md和NOTE.MD是同一个文件。_assert_no_existing_portable_alias会枚举目录兄弟项发现 NFC casefold 后冲突的别名即抛CASEFOLD_PATH_ALIAS把这类别名攻击从根上掐掉。死锁恢复的复查很多人以为清理死锁就是删掉锁目录实际上代码会先确认持有进程已死且锁超龄清理动作本身还要复查锁身份未变否则会把一个活着的持有者的锁误删。 跑起来看看git clone https://gitcode.com/GitHub_Trending/cl/claude-obsidian安装细节见 docs/install-guide.md归档事务规则另有 skills/wiki/references/operation-transactions.md 说明。把几份资料丢进inbox/执行一次归档再打开 Obsidian 看图谱归档结果最终沉淀为画布里可反复查询的知识地图 关键文件速查文件一句话职责claude_obsidian/capture.py归档前置校验、预算、队列与锁claude_obsidian/transaction.py路径安全、原子写与回滚恢复claude_obsidian/paths.py库根选择与路径包含性检查SECURITY.md安全边界与防御性不变量声明每个冲突都落到确定性错误码——归档入口只收干净的文件。【免费下载链接】claude-obsidianSelf-organizing AI second brain for Obsidian Claude Code. Drop any source and Claude reads, links, and files it into one connected knowledge graph of plain Markdown you own. AI note-taking, personal knowledge management (PKM), and an open-source Notion alternative. Based on Karpathys LLM Wiki pattern.项目地址: https://gitcode.com/GitHub_Trending/cl/claude-obsidian创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门