웹 애플리케이션의 보안 취약점 중 하나인 Sensitive Data Exposure(민감한 데이터 노출)는 개발자가 실수로 웹페이지에 중요한 정보를 노출하는 경우 발생한다. 이는 단순히 애플리케이션의 버전 정보를 노출하는 것부터, 심각한 경우 데이터베이스 전체가 외부에 노출되는 상황까지 포함된다. 이러한 취약점은 비교적 쉽게 발견될 수 있으며, 누구든지 약간의 지식만 있어도 악용할 가능성이 높다.
이러한 실수는 보통 여러 개발자가 협업하면서 발생하며, 사이트를 배포하기 전 보안 점검을 제대로 수행하지 않으면 쉽게 발견될 수 있다.
웹 애플리케이션을 분석할 때 가장 먼저 할 일은 페이지의 소스 코드(View Page Source)를 확인하는 것이다. 예제에서는 웹사이트의 로그인 페이지를 분석하는 과정에서, 주석을 통해 다음과 같은 정보를 발견할 수 있었다.
<!-- Must remember to do something better with the database, then store it in /assets -->
이 주석을 통해 데이터베이스가 /assets
디렉토리에 저장되어 있다는 사실을 알 수 있다.
웹사이트의 소스 코드에서 /assets
디렉토리를 확인한 후, 해당 디렉토리를 직접 방문하면 다음과 같은 파일 목록을 볼 수 있다.
/assets/webapp.db
/assets/style.css
/assets/script.js
여기서 webapp.db
파일은 데이터베이스 파일로 보이며, 이를 다운로드하여 분석할 수 있다.
다운로드한 webapp.db
파일을 SQLite를 이용해 분석한다.
sqlite3 webapp.db
sqlite> .tables
sessions users
users
테이블이 존재하며, 이를 조회하면 사용자 계정 정보가 포함되어 있을 가능성이 높다.
SELECT * FROM users;
이 결과를 통해 admin
계정과 그에 대한 해시된 비밀번호(hash password)를 확인할 수 있다.
웹사이트에서 얻은 해시된 비밀번호를 온라인 해시 크래킹 사이트(예: CrackStation)에서 복호화할 수 있다.
이렇게 얻은 패스워드를 이용해 관리자 계정에 로그인하면 사이트의 주요 정보를 확인이 가능하며, 유저 정보 수정 등 민감정보를 관리할 수 있다.
민감한 데이터 노출은 기술적인 보안 취약점이라기보다는 개발자의 실수로 인해 발생하는 경우가 많다. 따라서 보안 점검과 코드 리뷰를 철저히 수행하는 것이 중요하다.
이번 예제에서는 단순한 주석 한 줄이 결국 데이터베이스 파일 노출로 이어지는 위험한 상황을 보여주었다. 실무에서도 이러한 실수를 방지하려면 보안 모범 사례를 준수하고, 배포 전에 반드시 점검하는 습관을 들여야 한다.