PT-2026-49599 · Crates.Io · Skillctl
Publicado
2026-06-05
·
Atualizado
2026-06-05
Nenhuma
Não há classificações de severidade ou métricas disponíveis. Quando houver, atualizaremos as informações correspondentes na página.
Impact
skillctl 0.1.0 and 0.1.1 contained four path-safety vulnerabilities that, in combination, allowed an attacker to:-
Exfiltrate arbitrary files on the operator's machine by publishing a malicious skills library containing a symlink inside a skill folder (e.g.
niania → /home/user/.aws/credentials). The symlink fell throughentry.file type().is dir()infs util::copy dir all, was dereferenced byfs::copy, and the target's content was copied into the project. A subsequentskillctl pushwould have published the secret to the (possibly public) library — what the reporter called "round-trip path exfiltration". -
Delete arbitrary directories outside the project or library root by crafting a
.skills.tomlwith a maliciousdestinationorsource pathfield. Both were deserialized asPathBufwith zero validation. BecausePath::joinlets an absolute right-hand side replace the base,destination = "/home/user/.ssh"madecwd.join(...)resolve outside the project;..traversal was equally unguarded. Downstreamremove dir allinreplace folder contentsthen wiped arbitrary writable directories onskillctl pull/push/detect..skills.tomlis the exact kind of file teams commit and exchange via PR; a single merged malicious PR was sufficient to weaponise the maintainer's nextskillctl pull --all. -
detect --targetaccepted..traversal, even though absolute paths were rejected.--target ../../../etcwould have written outside the library root. -
Fork-name validation accepted
.and..literally, so a fork named..would have produced aPath::joinresolving to the parent directory andfs::renamecould have clobbered it.
Patches
Fixed in v0.1.2:
- Symlinks inside skill folders are hard-rejected at copy time (both top-level source and any descendant entry).
.skills.tomldestinationandsource pathare validated at load time and reject absolute paths,..components, and Windows-prefix components.- A new
path safety::safe joinhelper is wired (defense-in-depth) at every destructive call site inpull.rs/push.rs. detect --targetand the interactive custom-path prompt go through the samevalidate relative subpathhelper.validate fork nameexplicitly rejects.and...
Threat-model note: the fix is purely lexical (component-level) plus an explicit symlink check at copy time. No filesystem
canonicalize calls were added, avoiding TOCTOU windows.Credit
Reported privately on 2026-05-19 by firebaguette via the Umanio Discord (the reporter declined GitHub credit, so this advisory carries no structured credits field).
Path traversal
Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾
Identificadores relacionados
Produtos afetados
Skillctl