GHSA-38CW-85XC-XR9X: 정체성 위기: SQL 인젝션을 통한 Veramo의 디지털 지갑 덤프
Source: Dev.to
취약점 개요
- 취약점 ID: GHSA-38CW-85XC-XR9X
- CVE: 해당 없음
- CVSS 점수: 6.8 (중간)
- 공개일: 2026-01-16
- CWE: CWE‑89 (SQL Injection)
- 공격 벡터: 네트워크 (인증된 사용자)
- 영향: 높음 – 개인 키와 검증 가능한 증명서의 기밀성 및 무결성
Veramo 프레임워크의 데이터 저장 계층에 심각한 SQL 인젝션 결함이 존재합니다. 인증된 공격자는 API 요청의 order 파라미터를 조작해 ORM이 임의의 SQL을 실행하도록 만들 수 있으며, 이로 인해 DID, 개인 키, 검증 가능한 증명서를 포함한 전체 데이터베이스를 추출할 수 있습니다.
영향을 받는 구성 요소
| 패키지 | 영향을 받는 버전 | 수정 버전 |
|---|---|---|
@veramo/data-store | < 6.0.2 | 6.0.2 |
@veramo/data-store-json | < 6.0.2 | 6.0.2 |
취약한 함수는 data-store-orm.ts 파일의 decorateQB() 입니다.
패치 상세
--- a/packages/data-store/src/data-store-orm.ts
+++ b/packages/data-store/src/data-store-orm.ts
@@ -1,4 +1,5 @@
+import { ALLOWED_COLUMNS } from './constants'
...
- qb = qb.addSelect(
- qb.connection.driver.escape(tableName) + '.' + qb.connection.driver.escape(item.column),
- item.column,
- )
+ if (!ALLOWED_COLUMNS.includes(item.column)) {
+ throw new Error('Invalid column')
+ }
주요 변경 사항
- 컬럼 이름에 대한 허용 목록(
ALLOWED_COLUMNS)을 추가했습니다. - ORM은 예상치 못한 컬럼이 요청될 경우 오류를 발생시켜 악의적인 정렬 절을 방지합니다.
완화 조치 단계
-
패키지 업그레이드
# npm 사용 시 npm install @veramo/data-store@^6.0.2 @veramo/data-store-json@^6.0.2 # yarn 사용 시 yarn add @veramo/data-store@^6.0.2 @veramo/data-store-json@^6.0.2 -
Veramo 에이전트 재시작 – 업데이트된 라이브러리를 로드합니다.
-
맞춤형 데이터 스토어
decorateQB를 오버라이드한 경우, 컬럼 이름에 대해 동일한 허용 목록 검사를 수행하도록 합니다. -
최소 권한 원칙 적용된 데이터베이스 접근
- Veramo 에이전트가 사용하는 데이터베이스 사용자가
private-key테이블을 읽을 필요가 없는 경우 접근을 제한합니다. - 개인 키를 별도의, 보다 엄격하게 제어되는 백엔드에 저장하는 것을 고려하십시오.
- Veramo 에이전트가 사용하는 데이터베이스 사용자가
참고 자료
- GitHub 보안 권고: GHSA-38CW-85XC-XR9X
- Veramo 프레임워크 문서 – https://veramo.io/docs
전체 기술 분석, 인터랙티브 다이어그램 및 익스플로잇 상세 내용은 공식 웹사이트의 권고문을 참고하십시오.