Study

Web cache deception

cloudnaaam 2025. 7. 19. 15:56

- 이 글은 아직 현업을 경험하지 못한 보안 공부생의 정리 글이니, 정확하지 않을 수도 있습니다.-

 

Web cache deception이란

웹은 정적 콘텐츠, 동적 콘텐츠로 구성된다. 정적 콘텐츠(Static Contents)의 경우 PNG, JPG 등 정보가 고정된 콘텐츠를 의미한다. 트래픽이 많아질 경우에 서버의 부담을 덜어주기 위해 Caching을 이용하기도 하는데, 이 때 발생할 수 있는 취약점이다. 

 

먼저 알아야 할 것은

사용자 - 캐시 서버 - 백엔드 서버  간의 관계이다.

출처: 챗지피티

 

이런 식으로 있다고 생각하면 되는데, 캐시 서버에서 Caching을 하면 유저의 로컬 브라우저에 저장되게 된다. 즉, 백엔드 서버까지 굳이 가서 다시 콘텐츠를 불러올 필요가 없어진다는 것이고, 그러면 서버의 부담이 줄게 되는 것.

 

근데 만약 캐시 서버와 백엔드 서버의 URL 정규화 규칙이 다르다면? Web cache deception 취약점이 발생하게 되는 것.

 

예를 들어 /my-account 로 접근하면

이렇게 내 정보가 뜬다.

 

만약 캐시 서버는 경로를 그대로 해석하고, 백엔드 서버는 /my-account/* 는 모두 동일하게 처리할 때,

/my-account/asd.js로 접근하면

이렇게 caching 하는 것을 확인할 수 있다.

두 번째 접근에서는 cache가 hit 되었고, 30초 동안은 /my-account/asd.js에 접근하면 내 정보가 그대로 보이게 되는 것.

그리고 만일 이걸 다른 사람이 접근하게 된다면? 누군가에게 리다이렉션을 강제로 시켜서 접근시켜버린다면?

그 사람의 정보가 다시 caching 되어 캐시 서버에 저장되고, 이를 내가 빠르게 접근하면 정보 탈취가 가능한 것.

 

중요한 점은, 캐시 서버와 백엔드 서버 간 정규화 불일치 여부를 찾아내는 것. 그리고 캐싱 규칙을 찾아내는 것.

주로 robot.txt favicon.ico index.html 등 수정이 거의 없는 파일에서 캐싱 규칙을 찾아낼 수 있다.

 

CDN 기능이나, Cache-Control 헤더, 그리고 서버들 간의 정규화 통일을 통해 취약점을 방어할 수 있겠다.

 

 

 

'Study' 카테고리의 다른 글

XS_leak  (0) 2025.12.02
JWT (Json web token)  (0) 2025.08.20
pugjs 취약점  (0) 2025.06.26
Unicode case mapping collision  (0) 2025.06.26
Prototype Pollution  (0) 2025.06.25