🇰🇷 한글 설명
Neuron PHP 프레임워크의 MySQLSelectTool에서 발생하는 Read-Only Bypass 취약점으로, 공격자가 파일을 임의로 작성할 수 있는 취약점입니다.
💡 쉬운 설명
Neuron PHP 프레임워크의 MySQLSelectTool에서 발생하는 취약점으로, 공격자가 파일을 임의로 작성할 수 있습니다. 이는 MySQL/MariaDB 계정이 FILE 권한을 가지고 있고, 서버 설정이 유용한 위치에 대한 쓰기를 허용하는 경우에 발생할 수 있습니다.
🇺🇸 원문 (English)
Neuron is a PHP framework for creating and orchestrating AI Agents. Versions 2.8.11 and below use MySQLSelectTool, which is vulnerable to Read-Only Bypass. MySQLSelectTool is intended to be a read-only SQL tool (e.g., for LLM agent querying, however, validation based on the first keyword (e.g., SELECT) and a forbidden-keyword list does not block file-writing constructs such as INTO OUTFILE / INTO DUMPFILE. As a result, an attacker who can influence the tool input (e.g., via prompt injection through a public agent endpoint) may write arbitrary files to the DB server if the MySQL/MariaDB account has the FILE privilege and server configuration permits writes to a useful location (e.g., a web-accessible directory). This issue is fixed in version 2.8.12.
📍 영향받는 시스템
Neuron PHP 프레임워크 2.8.11 버전 이하
⚔️ 공격 벡터
공격자는 공공 에이전트 엔드포인트를 통해 도구 입력에 영향을 미칠 수 있으며, MySQL/MariaDB 계정이 FILE 권한을 가지고 있고, 서버 설정이 유용한 위치에 대한 쓰기를 허용하는 경우에 임의의 파일을 작성할 수 있습니다.
🛡️ 대응 방법
Neuron PHP 프레임워크를 2.8.12 버전으로 업데이트하거나, MySQL/MariaDB 계정의 FILE 권한을 제거하거나, 서버 설정을 변경하여 유용한 위치에 대한 쓰기를 금지합니다.
🔧 검증 코드
로컬 Linux PC에서 Python을 설치하고, neuron 패키지를 설치한 후, 위의 코드를 실행하여 Neuron PHP 프레임워크의 버전을 확인합니다. 코드를 실행하기 위해선 Python과 pip가 설치되어 있어야 합니다.
import subprocess
result = subprocess.run(['pip', 'show', 'neuron'], capture_output=True, text=True)
if 'Version: 2.8.11' in result.stdout or 'Version: 2.8.10' in result.stdout:
print({"result": "취약", "reason": "Neuron PHP 프레임워크의 버전이 2.8.11 또는 2.8.10입니다."})
else:
print({"result": "양호", "reason": "Neuron PHP 프레임워크의 버전이 2.8.12 이상입니다."})