프로젝트별 보안 취약점
마지막으로 끝까지 완료한 검사 기준입니다. 같은 문제는 한 번만 셉니다.
| 프로젝트 | 비밀값 | 시큐어코딩 | 오픈소스 취약점 | 라이선스 | 합계 | 마지막 검사 | AI 오탐 추정 |
|---|---|---|---|---|---|---|---|
| payment-api | 1 | 7 | 4 | 1 | 13 | 2026-10-10 09:05 | 2건 |
| partner-portal | 0 | 5 | 2 | 0 | 7 | 2026-10-09 18:42 | 1건 |
| batch-settlement | 2 | 3 | 6 | 1 | 12 | 2026-10-08 11:20 | 0건 |
데모에서는 payment-api 프로젝트의 결과를 열어 볼 수 있습니다.
대시보드 / payment-api
payment-api
미해결 13건 · 같은 규칙에 걸린 항목은 한 그룹으로 묶어 보여 줍니다.
SQL 쿼리 문자열 결합CWE-89HIGH2건
src/main/java/com/sample/payment/order/OrderRepository.java:48신규src/main/java/com/sample/payment/refund/RefundRepository.java:73
로그에 민감정보 출력CWE-532MEDIUM3건
src/main/java/com/sample/payment/PaymentService.java:112src/main/java/com/sample/payment/log/LogMasking.java:21AI 오탐 추정src/main/java/com/sample/payment/card/CardController.java:88
경로 조작CWE-22HIGH1건
src/main/java/com/sample/payment/file/FileController.java:57AI 오탐 추정
예측 가능한 난수 사용CWE-330MEDIUM1건
src/main/java/com/sample/payment/auth/TokenGenerator.java:19
log4j-core 원격 코드 실행CVE-2021-44228CRITICAL1건
org.apache.logging.log4j:log4j-core 2.14.1· 수정 버전 2.17.1 이상
spring-beans 원격 코드 실행CVE-2022-22965CRITICAL1건
org.springframework:spring-beans 5.3.17· 수정 버전 5.3.18 이상
commons-text 문자열 치환 원격 코드 실행CVE-2022-42889CRITICAL1건
org.apache.commons:commons-text 1.9· 수정 버전 1.10.0 이상
jackson-databind 깊은 중첩 서비스 거부CVE-2020-36518HIGH1건
com.fasterxml.jackson.core:jackson-databind 2.13.1· 수정 버전 2.13.2.1 이상
클라우드 액세스 키 노출CRITICAL1건
src/main/resources/application-prod.yml:12· 값은 가려서 표시합니다AKIA••••••••
강한 카피레프트 라이선스 구성요소AGPL-3.0HIGH1건
com.itextpdf:kernel 7.2.5· 서비스 제공 방식에 따라 소스 공개 의무가 생길 수 있어 법무 검토가 필요합니다.
데모에서는 OrderRepository.java:48 항목의 상세 화면을 볼 수 있습니다.
대시보드 / payment-api / 항목 상세
SQL 쿼리 문자열 결합
src/main/java/com/sample/payment/order/OrderRepository.java:48
위치
46public List<Order> findByCustomer(String customerId) {
47 // 고객별 주문 조회
48 String sql = "SELECT * FROM orders WHERE customer_id = '" + customerId + "'";49 return jdbcTemplate.query(sql, orderMapper);
50}
왜 위험한지
외부에서 받은 값을 SQL 문장에 그대로 이어 붙이면, 공격자가 값에 SQL 구문을 넣어 다른 고객의 주문을 조회하거나 데이터를 바꿀 수 있습니다.
고치는 방법
값을 문자열로 이어 붙이지 말고 바인딩 변수(?)로 전달하세요. 쿼리 문장과 값이 분리되어 입력값이 SQL 구문으로 해석되지 않습니다.
요약
- 심각도
- HIGH
- 범주
- 시큐어코딩
- 분류
- CWE-89 SQL 삽입
- 상태
- 신규
- 처음 발견
- 2026-10-10
AI 검토정탐
customerId가 요청 값에서 검증 없이 SQL 문장으로 들어갑니다. 실제로 악용될 수 있는 위치로 판단했습니다.
제안 수정
- String sql = "SELECT * FROM orders WHERE customer_id = '" + customerId + "'";
- return jdbcTemplate.query(sql, orderMapper);
+ String sql = "SELECT * FROM orders WHERE customer_id = ?";
+ return jdbcTemplate.query(sql, orderMapper, customerId);
AI 판정은 제안입니다. 최종 결정은 담당자가 합니다.
AI 오탐 추정
AI가 오탐으로 추정한 항목입니다. 담당자가 근거를 보고 확인하면 집계에서 빠집니다.