ORM Injection (CVE-2026-30951)
본문 바로가기

CVE 취약점

ORM Injection (CVE-2026-30951)

반응형

 

1. ORM 이란

ORM(Object-Relational Mapping, 객체 관계 매핑)은 현대 소프트웨어 개발에서 가장 중요한 개념 중 하나입니다. 한마디로 정의하자면 객체 지향 프로그래밍 언어의 '객체'와 관계형 데이터베이스(RDBMS)의 '테이블'을 자동으로 연결(매핑)해주는 기술입니다.


2. ORM 핵심 개념

일반적으로 개발자는 프로그래밍 언어(Java, JavaScript, Python 등)를 사용하여 코드를 짰지만, 데이터를 저장하려면 SQL(데이터베이스 언어)을 별도로 공부해서 작성해야 했습니다. ORM은 이 사이의 '번역가' 역할을 수행합니다.


3. SQL 없이 DB를 쓸 수 있게 해줍니다.

ORM이 없으면 개발자가 직접 SQL을 작성해야 합니다.

 

ORM을 쓰면 SQL 대신 코드로 씁니다.


4. 대표적인 ORM 라이브러리

언어 ORM
JavaScript/Node.js Sequelize, Prisma, TypeORM
Python SQLAlchemy, Django ORM
Java Hibernate
Ruby ActiveRecord

 


반응형

5. CVE-2026-30951 개요

Sequelize는 Node.js 생태계에서 가장 널리 사용되는 ORM(Object-Relational Mapping) 라이브러리 중 하나입니다. CVE-2026-30951은 Sequelize v6의 JSON/JSONB 컬럼 where 절 처리 로직에서 발견된 SQL Injection 취약점입니다.

ORM을 사용하면 SQL을 직접 작성하지 않아도 되므로 안전하다고 생각하기 쉽지만, 이 취약점은 ORM 내부의 SQL 생성 과정 자체에 결함이 있어 개발자가 아무리 안전하게 코드를 작성해도 공격자가 SQL을 주입할 수 있다는 점에서 매우 위험합니다.


6. CVE-2026-30951 원리

Sequelize v6은 JSON 컬럼에 대한 where 절을 처리할 때, JSON 경로 키에서 ::를 기준으로 문자열을 분리해 CAST 타입을 추출합니다. 문제는 이 CAST 타입 값이 아무런 검증이나 이스케이프 없이 SQL 쿼리에 그대로 삽입된다는 점입니다.

 


7. 공격 수행(PoC)

Step 1) Node.js 패키지 관리도구인 npm을 설치합니다.

 

Step 2) Node.js 프로젝트에서 Sequelize(ORM), SQLite3(DB), Express(웹 서버 프레임워크)를 설치합니다.

 

Step 3) sequelize 취약한 버전인지 확인합나다.

 

Step 4) 취약한 페이지를 만든 소스코드를 저장합니다.

 

Step 5) server.js 파일을 실행합니다.

 

Step 6) 페이지가 작동하는 것을 알 수 있습니다.

 

Step 7) role/admin 입력을 하면 아래와 같이 1개의 데이터가 노출되는 것을 알 수 있습니다.

 

Step 8) BurpSuite 프로그램을 이용하여 role::text)+OR+1=1-- SQL Injection 구문을 삽입한다.

 

Step 9) 처음과는 다르게 SQL Injection 공격이 성공하여 데이터가 10개 유출되는 것을 알수 있습니다.

 

Step 10) ORM Injection 실습 영상입니다.


8. CVE-2026-30951 원리

req.body.searchKey — 사용자가 폼에서 입력한 값이 그대로 JSON 객체의 키(key) 로 들어갑니다.

 

Sequelize v6은 metadata: { "role": "admin" } 처럼 JSON 컬럼 where 절을 처리할 때, 키에 :: 가 포함되어 있으면 이를 기준으로 분리해 cast 타입으로 사용합니다. 이때 cast 타입 부분을 검증 없이 SQL에 그대로 삽입합니다.


9. 대응방안

Sequelize 라이브러리 업데이트 
취약점이 발견된 Sequelize 버전 대신, 이 문제가 해결된 최신 버전으로 업데이트해야 합니다. 최신 버전은 ::text)와 같은 문자가 들어와도 이를 SQL 문법으로 오해하지 않도록 내부적인 Sanitization 로직이 강화되어 있습니다.

 

 

반응형

'CVE 취약점' 카테고리의 다른 글

Fragnesia (CVE-2026-46300)  (0) 2026.05.16
Pack2TheRoot (CVE-2026-41651)  (0) 2026.04.26
CVE-2026-24061  (0) 2026.01.31
Ni8mare (CVE-2026-21858)  (0) 2026.01.16
MongoBleed (CVE-2025-14847)  (0) 2026.01.06