[2026 주요정보통신기반시설] CI-21 불필요한Method악용(Unnecessary HTTP Methods)

PUT,DELETE,TRACE등불필요한HTTP메소드의악용여부확인

불필요한Method악용(Unnecessary HTTP Methods)

가이드라인 원문

항목내용
항목코드CI-21
점검내용PUT,DELETE,TRACE등불필요한HTTP메소드의악용여부확인
점검대상웹 애플리케이션 서버
양호기준웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 패킷전송시해당메소드를통하여임의의행위로부터악용이제한되는경우
취약기준웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 패킷전송시해당메소드를통하여임의의행위에대한악용이가능한경우
조치방법WEB/WAS의설정파일을변경하여불필요한메소드의사용을제한

상세 설명

1. 판단 기준

기본 판단 기준

  • 양호: 웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 패킷 전송 시 해당 메소드를 통하여 임의의 행위로부터 악용이 제한되는 경우
  • 취약: 웹 애플리케이션에 불필요한 메소드(PUT, DELETE, TRACE, CONNECT 등)로 변조한 요청 패킷 전송 시 해당 메소드를 통하여 임의의 행위에 대한 악용이 가능한 경우

경계 케이스 (Edge Case) 처리 방법

  • 일반적인 경우 영향 없음
  • RESTful API에서 PUT, DELETE를 사용하는 경우 괜찮음
  • 단, WebDAV는 비활성화 권장

권장 설정값

  • TRACE 메소드: 반드시 비활성화
  • WebDAV (PUT, DELETE): 필요한 경우에만 사용
  • CONNECT: 비활성화 권장

2. 점검 방법

Step 1: PUT 메소드 테스트

1
PUT 메소드를 사용하여 악성 파일(Server Side Script, 악성 스크립트 등) 생성 시도

Step 2: DELETE 메소드 테스트

1
DELETE 메소드를 사용하여 서버에 저장된 임의의 데이터 삭제 가능

Step 3: TRACE 메소드 테스트

1
TRACE 메소드를 사용하여 쿠키 탈취 가능 여부 확인

3. 조치 방법

1. Apache 서버

WebDAV 비활성화:

1
2
3
# WebDAV 모듈 비활성화
sudo a2dismod dav
sudo a2dismod dav_fs

PUT, DELETE 메소드 제한:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<Directory "/var/www/html">
    Dav Off  # WebDAV 비활성화
    Options FollowSymLinks

    # PUT, DELETE 메소드 사용 금지
    <LimitExcept GET POST OPTIONS>
        Order Allow,Deny
        Deny from all
    </LimitExcept>
</Directory>

TRACE 메소드 비활성화:

1
2
# /etc/apache2/apache2.conf 또는 httpd.conf
TraceEnable Off

CONNECT 메소드 비활성화:

1
2
3
4
5
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} ^CONNECT
    RewriteRule .* - [F]
</IfModule>

2. Nginx 서버

WebDAV 비활성화:

1
2
3
4
location /dav/ {
    # dav_methods 지시어 제거
    # dav_methods PUT DELETE MKCOL COPY MOVE;
}

TRACE 메소드 비활성화:

1
2
3
4
5
6
7
# Nginx 0.5.17 이후 버전은 기본적으로 TRACE 비활성화
# 명시적으로 설정하려면:
server {
    if ($request_method = TRACE) {
        return 405;
    }
}

3. Tomcat 서버

WebDAV 비활성화:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<!-- server.xml 또는 context.xml -->
<!-- webdav 서블릿 제거 또는 readonly 설정 -->
<servlet>
    <servlet-name>webdav</servlet-name>
    <servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
    <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>  <!-- 쓰기 권한 제거 -->
    </init-param>
</servlet>

TRACE 메소드 비활성화:

1
2
3
4
5
<!-- server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           allowTrace="false" />  <!-- 설정 제거 또는 false로 설정 -->

4. IIS 서버

IIS 6.0 이하:

1
2
3
4
1. 레지스트리 편집기 열기
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters
3. 새 DWORD 값: DisableWebDAV = 1
4. IIS 재시작

IIS 7.0 이상:

1
2
3
4
5
1. IIS 관리자 실행
2. 요청 필터링 → HTTP 동사 → 동사 거부
3. TRACE 추가

또는 WebDAV 역할 서비스 비활성화

5. 애플리케이션 레벨 제한

Spring Boot 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Configuration
public class WebSecurityConfig {
    @Bean
    public FilterRegistrationBean<MethodFilter> methodFilter() {
        FilterRegistrationBean<MethodFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new MethodFilter());
        registration.addUrlPatterns("/*");
        return registration;
    }
}

public class MethodFilter implements Filter {
    private static final Set<String> ALLOWED_METHODS =
        Set.of("GET", "POST", "HEAD", "OPTIONS");

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
                        FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        String method = req.getMethod();

        if (!ALLOWED_METHODS.contains(method)) {
            ((HttpServletResponse) response).sendError(
                HttpServletResponse.SC_METHOD_NOT_ALLOWED,
                "Method Not Allowed"
            );
            return;
        }

        chain.doFilter(request, response);
    }
}

4. 참고 자료

HTTP 메소드:

메소드용도위험성
GET리소스 조회안전함
POST리소스 생성안전함
HEAD헤더만 조회안전함
OPTIONS통신 옵션 확인안전함
PUT리소스 업데이트/생성파일 업로드 가능
DELETE리소스 삭제데이터 삭제 가능
TRACE요청 반향쿠키 탈취 가능
CONNECT프록시 터널프록시 악용 가능
PATCH부분 업데이트일부 공격 가능

XST (Cross-Site Tracing) 공격:

  • TRACE 메소드를 악용
  • HttpOnly 쿠키 탈취 가능
  • 모든 최신 브라우저에서 TRACE 비활성화됨

RESTful API 사용 시:

  • PUT, DELETE를 사용해도 됨
  • 하지만 인증과 권한 검증 필수
  • 입력값 검증 필수

WebDAV 사용 시:

  • 망 분리된 내부망에서만 사용
  • 적절한 인증 절차 필요
  • 쓰기 권한 최소화

5. 스크립트

  • 취약점 점검 스크립트
    • 이 스크립트는 KISA 주요정보통신기반시설 기술적 취약점 분석·평가 가이드라인(2026)을 준수하여 제작된 자동 점검 도구입니다. 복잡한 단일 파일 방식이 아닌 모듈화된 구조로 설계되어 유지보수가 쉽고 확장이 용이합니다.
    • 다양한 환경에서 테스트를 진행했으나, 혹시 점검 로직에 이슈가 발견되거나 개선이 필요한 경우 적극적인 제보를 부탁드립니다.
Hugo로 만듦
JimmyStack 테마 사용 중