개념
OWASP Top 10이란
OWASP(Open Worldwide Application Security Project)는 웹 애플리케이션 보안 취약점을 연구하는 비영리 단체다. OWASP Top 10은 실제로 가장 자주, 가장 심각하게 발생하는 취약점 유형 10가지를 정리한 목록으로, 몇 년마다 갱신된다. 보안 전문가가 아닌 QA도 이 목록의 대표 항목 몇 가지를 알면, 최소한의 관점으로 취약점 가능성을 알아챌 수 있다.
인젝션(Injection)
사용자 입력을 제대로 검증하지 않아, 입력값이 명령어의 일부로 실행되어 버리는 취약점이다. 모듈 9(레슨 5)에서 배운 SQL을 떠올려보자.
정상 입력: 검색창에 "노트북" 입력
공격 입력: 검색창에 "'; DROP TABLE users; --" 입력애플리케이션이 이 입력을 제대로 걸러내지 못하면, 검색창에 입력한 텍스트가 실제 데이터베이스 명령어로 실행되어 데이터가 통째로 삭제될 수도 있다. 모듈 3(레슨 8~9)에서 배운 악성 입력 테스트가 바로 이런 시나리오를 겨냥한 것이다.
손상된 접근 제어(Broken Access Control)
모듈 9(레슨 3)에서 배운 **인가(Authorization)**가 제대로 안 된 경우다.
정상: 내 계정으로 로그인해서 /orders/123(내 주문)을 조회
공격: 로그인은 했지만, URL을 /orders/124(다른 사람 주문)로 바꿔서
접근했더니 그대로 정보가 보임이건 모듈 9(레슨 3)의 실습 과제에서 다뤘던 "인가 검사가 프론트엔드에만 있고 서버에는 없는" 문제와 정확히 같은 취약점이다.
취약하고 오래된 컴포넌트 사용
애플리케이션이 쓰고 있는 외부 라이브러리에, 이미 알려진 보안 취약점이 있는 오래된 버전을 그대로 쓰는 경우다. 이건 레슨 6에서 다룰 SCA 도구가 자동으로 찾아주는 영역이다.
암호화 처리 실패
비밀번호나 개인정보를 평문(암호화 안 된 상태)으로 저장하거나, 안전하지 않은 방식으로 전송하는 경우다. 모듈 7(레슨 2)에서 배운 데이터 마스킹 원칙이 여기서도 연결된다 — 테스트 환경뿐 아니라 운영 환경에서도 민감정보 보호가 기본이어야 한다.
보안 설정 오류
기본 관리자 비밀번호를 그대로 쓰거나, 에러 메시지에 시스템 내부 정보(서버 경로, 데이터베이스 종류)가 그대로 노출되는 경우처럼, 설정을 제대로 안 해서 생기는 취약점이다.
안전하지 않은 에러 메시지 예시:
"Error: MySQL connection failed at /var/www/app/db.php line 42"
→ 공격자에게 시스템 구조에 대한 힌트를 그대로 준다QA가 할 수 있는 최소한의 것
전문 침투 테스트(Penetration Testing)는 별도 전문가의 영역이지만, QA는 기능 테스트를 하면서 다음과 같은 것들을 함께 확인할 수 있다.
- 다른 사용자의 데이터에 URL 조작으로 접근되지 않는지(접근 제어)
- 입력창에 특수 문자나 스크립트 코드를 넣었을 때 이상하게 반응하지 않는지(인젝션)
- 에러 화면에 시스템 내부 정보가 노출되지 않는지(설정 오류)
실무에서 왜 필요한가
보안 사고는 발생 빈도는 낮아도 파급력이 매우 크다 — 개인정보 유출은 법적 책임과 신뢰 손실로 직결된다. 전담 보안팀이 없는 조직에서는 QA가 기능 테스트를 하며 발견하는 "이거 다른 사람 정보가 보이는데요?" 같은 발견이 실질적인 사고를 막는 마지막 방어선이 되기도 한다.