Budibase: `multipleStatements: true`를 통한 SQL 주입
원격 공격자가 임의의 SQL 명령을 실행할 수 있도록 허용하는 Budibase의 MySQL 통합에서 심각한 SQL 주입 취약점이 발견되었습니다.
SQL 주입
Budibase의 MySQL 통합 구성 요소는 multipleStatements: true로 구성되어 단일 쿼리에서 여러 SQL 문을 실행할 수 있습니다. 공격자는 사용자 입력 필드를 통해 악성 SQL 명령을 주입하여 데이터베이스를 완전히 손상시킬 수 있습니다.
// 파일: packages/server/src/integrations/mysql.ts
// 라인: 173
this.config = {
...구성,
typeCast: defaultTypeCasting,
multipleStatements: true, // 취약함
시간대: "Z",
}
``자바스크립트 const mysql = require('mysql2');
// Budibase 취약 구성 const 연결 = mysql.createConnection({ 호스트: 'localhost', 사용자: '루트', 비밀번호: '비밀번호', multipleStatements: true, // 취약한 설정 시간대: "Z" });
// 공격: 데이터 파괴
연결.쿼리(
SELECT * FROM 사용자 WHERE ID = 1; DROP TABLE 민감한_데이터; --,
(오류, 결과) => {
if (!err) console.log("테이블이 성공적으로 삭제되었습니다.");
}
);
## 영향
- **데이터 삭제**: DROP TABLE, DELETE 명령 실행
- **데이터 도난**: SELECT INTO OUTFILE을 통해 데이터 유출
- **권한 에스컬레이션**: 데이터베이스 관리자 권한 부여
- **서비스 거부**: 서비스 운영을 방해합니다.
- **완전한 데이터베이스 손상**: 데이터베이스에 대한 완전한 제어
## 해결
### 패치
``차이점
--- a/패키지/서버/src/integrations/mysql.ts
+++ b/패키지/서버/src/integrations/mysql.ts
@@ -170,7 +170,7 @@ class MySQLIntegration은 SQL을 확장하여 DatasourcePlus를 구현합니다.
this.config = {
...구성,
typeCast: defaultTypeCasting,
- multipleStatements: true,
+ multipleStatements: 거짓,
시간대: "Z",
}
}
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 96.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 96.00 |
VPI 공식 vpi-v1 기준