Malicious repository symlinks escape the clone root during indexing
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
Direzione di ricerca
Inizia in api/config.py, in corrispondenza di iterate_files, e segui i suoi chiamanti nell’elenco della struttura della wiki e in api/rag/pipeline.py. Verifica il comportamento con un repository contenente un link simbolico che punta fuori dal checkout, quindi conferma che la visita e l’indicizzazione escludano il link simbolico e non possano leggere la sua destinazione.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Affected versions: confirmed on main at commit d92819a9 (the project publishes no tagged release).
Summary
The repository walker used for both the wiki-structure listing and the RAG indexer (iterate_files in api/config.py) follows symlinks: it calls is_file(), which dereferences a symlink, with no is_symlink() guard. A submitted repository containing a symlink pointing outside the checkout (to any file the server process can read) has that symlink listed as a normal file, and the indexer's open() on it dereferences straight to the external target.
Details
for p in Path(root_dir).rglob("*"):
if not p.is_file(): # follows the symlink
continue
...
results.append(os.path.relpath(p, root_dir)...)
# api/rag/pipeline.py
for relative_path in iterate_files(path, ...):
file_path = Path(path) / relative_path
with open(file_path, "r", ...) as f: # dereferences the symlink
content = f.read()
POC
(available upon request)
Impact
A repository author can commit a symlink (with an admitted extension) pointing to a server-readable file outside the checkout. Indexing that repository embeds the target's content into the wiki's RAG store, where it can later be recovered through chat/retrieval.
Suggested fix: skip symlinks during traversal rather than following them. A fix is included in the linked PR.
Fix: #596
- Lingua principale
- Python
- Stelle
- 18.1k
- Fork
- 2k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di AsyncFuncAI/deepwiki-open
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
AsyncFuncAI/deepwiki-open#608 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
AsyncFuncAI/deepwiki-open#589 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
AsyncFuncAI/deepwiki-open#539 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
AsyncFuncAI/deepwiki-open#610 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 20/100
AsyncFuncAI/deepwiki-open#609 ·
Tutte le issue di AsyncFuncAI/deepwiki-open
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
UKGovernmentBEIS/inspect_ai#5781 ·
I maintainer di solito rispondono entro 2 giorni
-
Bump .cicd to wamp-cicd 4c2f9ac: `just land` refuses open A18 decisions, `just where` lists themAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
crossbario/cfxdb#139 ·
-
Bump .cicd to wamp-cicd 4c2f9ac: `just land` refuses open A18 decisions, `just where` lists themAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
crossbario/txaio#241 ·
-
UX
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
mediajunkie/piper-morgan-product#1963 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100