Press

모던 웹 환경에서의 대표적인 취약점 TOP 7

관리자

view : 2380

보안뉴스 2022.07.01
https://url.stealien.com/4y3pu

 

스틸리언, ‘제1회 Stealien Security Seminar’에서 모던 웹 환경 대표 취약점 공개
Path Traversal 취약점, SSRF 취약점, Django 프레임워크 등 7가지 취약점 발표
개발자들의 부주의로 취약점 발생, 프레임워크 환경 변화에 맞춰 모던 웹 보안도 변화해야

 

사이버보안 전문기업 스틸리언이 6월 29일 개최한 사이버보안 세미나 ‘Stealien Security Seminar’에서 ‘모던 웹’ 환경에서 발생하는 대표 취약점을 공개했다. 모던 웹’은 NodeJS, Django와 같이 최근 영향력 있는 웹 프레임워크로 제작된 서비스를 의미하는데, 이러한 환경에서 개발자들의 사소한 부주의로 다양한 보안 취약점들이 발생할 수 있다. 이번에 공개된 대표 취약점은 7가지로 다음과 같다.

1. Path Traversal 취약점
Path Traversal 취약점은 파일을 옮기는 과정에서 옮기고자 하는 파일 이름에 대한 검증이 없기 때문에 발생하는 취약점이다. 이럴 경우 path 모듈의 base name function을 이용하는 것으로 취약점을 해결하면 된다. 또는 ../를 아예 막거나 언어 자체에 내장된 base name 함수를 이용하는 것이 가장 쉬운 방법 중 하나다. 그리고 파일을 다루는 기능에서는 사용자가 입력할 수 있는 입력 값의 집합이 어떻게 되는지 항상 염두에 두고 코드를 작성하는 노력이 필요하다.

2. SSRF 취약점
SSRF 취약점은 많이 나오는 취약점들 중 하나로, 이미지를 리사이즈하는 기능을 하는 엔드포인트에서 axios 모듈로 get 함수를 호출할 때 URL에 대한 미검증으로 발생하는 취약점이다. file 스킴을 통해 로컬 파일과 로컬 네트워크에 접근하거나 임의의 TCP 패킷을 생성할 수 있다. 또한, HTTP 프로토콜을 통해 우회할 수 있다.

따라서 입력된 URL에 http://, https:// 스킴을 사용했는지 확인하거나, 화이트리스트로 확인해야 한다. 또한, 도메인 검사를 IP로 된 URL로 받는다면, IP를 long 형식으로 변환하는 라이브러리를 이용해 long 형식으로 바꾼 뒤, 다시 IP로 변환해서 검사하는 방법을 사용해야 한다. 이 외에도 SSRF 취약점이 트리거 되는 기능 중에는 △SVG 파일을 PNG로 변환하는 기능 △html 파일을 PDF나 이미지로 렌더링하는 기능 △스프레드시트 형식의 파일을 받아 익스포트하는 기능들이 있다.

3. 장고(Django) 프레임워크, 자체 기능에서 발견할 수 있는 버그
장고는 파이썬(Python) 기반 웹 프레임워크 중 Flask와 더불어 가장 유명한 웹 프레임워크다. Admin 기능이 내장되어 있는 게 특징이며, DEBUG 모드가 설정돼 있다. 파일 업로드 경로에 있는 Apache2 웹 서버 프로그램의 설정 미스와 오픈소스로 공개된 Django의 Third-Party 어플리케이션에 대한 로지컬 공격이 발생할 수 있다.

Django의 DEBUG 모드가 활성화되어 있을 때 수집할 수 있는 정보는 서버의 세팅 값으로 넘겨준 데이터베이스 접속 정보나 허용된 CSRF ORIGIN 정보들을 확인할 수 있는 것을 볼 수 있다. 이 외에도 서버의 환경변수들을 출력해 장고 서버의 절대 경로를 알 수 있다.

4. 자바스크립트 Express 엔진
Express 엔진은 NodeJS 환경에서 독보적으로 가장 널리 사용되는 웹 프레임워크다. Prototype Pollution은 자바스크립트에서 객체지향을 구현한 방식이 prototype chain을 이용했을 때 발생하는 버그로, 변수를 조작할 수 있다. 해당 취약점을 방어하기 위해서는 키값을 검사하는 함수를 구현하는 등 확인하는 로직을 추가해야 한다.

5. SQL Injection 취약점
다음으로 SQL Injection 취약점은 MySQL 드라이버 중 가장 널리 사용되는 드라이버에서 발견되며, Logical한 버그를 유도해 Control Flow를 조작할 수 있다. 사용자가 입력한 user name과 password를 받아 SQL Query의 파라미터로 실행하고 사용자를 출력하는데, 이때 계정정보가 노출될 수 있다.

따라서 자바스크립트에서는 사용할 데이터에 대한 자료형을 정확히 명시하고 검사해 사용해야 한다. 이 점에서는 타입스크립트가 자바스크립트보다 유용하다. 보통의 웹 서비스를 공격할 때는 서비스가 사용하는 라이브러리의 1-day 취약점을 사용하거나 업로드된 파일의 파싱 에러 같은 버그를 연계해서 사용해 공격하는 경우가 많다. 이에 개발자는 보안 취약점이 나왔을 때 웹 서비스의 특성에 맞게 빠르게 조치해야 한다.

6. CKEditor 취약점
Frontend 스택에서는 CKEditor 취약점이 가장 많이 발견된다. 오픈소스 웹 에디터 CKEditor의 취약점은 XSS 취약점으로 자바스크립트 코드 실행으로 악성행위를 실행할 수 있다. 따라서 HTML 포맷에 맞게 파싱한 뒤 XSS 취약점을 일으킬 수 있는 키워드를 삭제해야 한다. 특히, sanitizing한 결과를 그대로 출력하면 웹 에디터의 기능을 제한없이 사용 가능하다.

7. Credential Leak
Frontend 스택에서 두 번째로 많이 나오는 취약점은 Credential Leak로, Credential 정보가 소스코드에 노출된 경우가 종종 발견된다. 보통은 Test 계정 유출이 가장 빈번하고 가끔씩 Cloud Credential이 노출되어 있는 경우도 있다. 이 버그를 방지하기 위해서는 배포 전 Credential 같은 민감한 정보들이 노출되어 있는지 확인하는 작업이 필요하다.

모던 웹에서는 쿠키에 세션 값을 저장하기보단 JWT 토큰 값을 이용하는 경우가 많다. 토큰을 사용할 때 JWT Token을 쿠키에 저장하는 경우도 있고, 브라우저의 로컬 스토리지에 저장하는 경우도 있다.

쿠키는 보안 취약점에 대응하기 위해 http only 같은 필드를 만들어 javascript에서 쿠키 값에 접근하지 못하도록 만들 수 있다. 하지만 로컬 스토리지는 그런 설정이 없어서 화면에서 보이는 것처럼 XSS 취약점이 발생했다고 가정했을 때 사용자의 계정을 탈취하기 쉽다. 그래서 되도록 쿠키를 이용해 토큰값을 저장해야 한다.

이러한 취약점들은 시스템 해킹에서 취약점 분석을 자동화하는 것보다, 코딩으로 자동화하기 쉽다. 이와 더불어 소프트웨어 개발 분야에서는 소프트웨어 배포 전 보안 취약점 검사로 모던 웹에서 발생하는 취약점을 줄여야 한다.

스틸리언 윤석찬 연구원은 모던 웹 환경에서의 대표 취약점에 대해 “웹 취약점은 기본 프레임 단에서 막아주기도 하지만, 다른 여러 에러들이 생긴다. 과거 웹 환경에 익숙하다면 프레임워크 환경 변화에 맞춰 모던 웹 보안에 대해 공부하면서 준비하고 대응해야 한다”고 강조했다.

스틸리언 신동휘 부사장은 ‘제1회 Stealien Security Seminar’에 대해 “이번 첫 보안 세미나는 취약점 분석 지원자, 보안담당자, 개발자 등 보안에 관심있는 사람이라면 누구나 참여할 수 있도록 마련된 자리”라며 “스틸리언이 운영하고 있는 SSL 프로그램과 취약점 연구기업으로서 지금까지 진행된 연구결과에 대해 공유 및 소통하고 싶었다”며 “다음 보안 세미나에서는 좀더 흥미롭고 유익한 주제와 다양한 콘텐츠로 만남의 장을 열겠다”고 밝혔다.

 

먼저 비밀번호를 입력하여 주세요.

창닫기확인