Tiny Bunny

Rookies/클라우드 기반 취약점 진단 및 대응 실무

[SK shieldus Rookies 19기] 소스코드 진단 01

bento 2024. 5. 17. 21:17
[SK쉴더스 Rookies 19기] 클라우드 기반 스마트 융합보안 과정

[case1]

String fileName = request.getParameter("P");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
FileInputStream fis = null;
try {
    response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ";");
    ...
    fis = new FileInputStream("C:/datas/" + fileName);
    bis = new BufferedInputStream(fis);
    bos = new BufferedOutputStream(response.getOutputStream());
    ...
취약점 경로 순회 공격 (Path Traversal)
양호/취약 취약
사유 파일명(P)에 대한 검증 없이 파일을 읽고 있기 때문

 

[case2]

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

...

<select id="boardSearch" parameterType="map" resultType="BoardDto">
select * from tbl_board where title like '%'||#{{keyword}||'%' order by pos asc
</select>
취약점 SQL Injection
양호/취약 취약
사유 입력 값 Keyword를 mybatis를 사용하여 #으로 바인딩 처리하기 때문
(# 문법으로 prepared statements를 사용 가능)

 

[case3]

<% String keyword = request.getParameter("keyword"); %>

keyword = keyword.replaceAll("&", "&amp;");
keyword = keyword.replaceAll("<", "&lt;");
keyword = keyword.replaceAll(">", "&gt;");
keyword = keyword.replaceAll("₩"", "&quot;");
keyword = keyword.replaceAll("'", "&#x27;");
keyword = keyword.replaceAll("/"", "&#x2F;");
keyword = keyword.replaceAll("(", "&#x28;");
keyword = keyword.replaceAll(")", "&#x29;");

<%=keyword%>
취약점 XSS
양호/취약 양호
사유 입력 값 Keyword에 대해 적절한 특수문자 필터링을 하고 있기 때문

 

728x90