- TSA의 KCM/CASS 인증 흐름에서 항공사 측 시스템이 뚫리면, 고용 상태 검증을 통과한 것처럼 임의 사용자를 추가해 보안검색 우회나 조종석 접근까지 이어질 수 있었음
- FlyCASS는 소형 항공사용 CASS 웹 인터페이스를 제공했고, Air Transport International 로그인 페이지의 SQL 인젝션으로 관리자 로그인이 가능했음
- 관리자 화면은 새 직원 추가 시 추가 검증 없이 KCM과 CASS 권한을 부여할 수 있어, 테스트 사용자가 두 시스템 모두에서 승인 상태로 확인됨
- 2024년 4월 말 ARINC, FAA, DHS/CISA에 공개된 뒤 DHS는 FlyCASS가 KCM/CASS에서 분리됐다고 확인했지만, TSA 설명에 대한 정정 요청에는 응답하지 않음
- TSA는 KCM 바코드 발급 전 심사 때문에 체크포인트 접근이 불가능하다고 했으나, 실제 절차에는 직원 ID 수동 입력 경로가 남아 있어 취약점 영향이 더 컸음
KCM과 CASS가 맡는 검증
- Known Crewmember(KCM) 는 TSA 프로그램으로, 조종사와 승무원이 국내 개인 여행 중에도 보안검색을 우회할 수 있게 함
- 직원은 전용 라인에서 KCM 바코드를 제시하거나 TSA 직원에게 직원 번호와 항공사를 제공함
- TSA 직원의 노트북이 항공사에 고용 상태를 확인하고, 성공하면 해당 직원은 별도 검색 없이 보안 구역에 들어갈 수 있음
- Cockpit Access Security System(CASS) 는 조종석 접근 자격을 확인하는 별도 시스템임
- 대부분의 항공기에는 조종석 안, 비행 조종사 뒤쪽에 점프시트(jumpseat)가 있음
- 조종사가 통근하거나 이동할 때 유상 좌석을 쓰기 어려우면 점프시트를 사용할 수 있음
- 게이트 직원은 CASS로 점프시트 이용자가 승인된 조종사인지 확인하고, 승무원에게 CASS 인증 사실을 알릴 수 있음
- 두 절차의 핵심은 현재 항공사 고용 상태 확인임
- 항공사 직원이 아니면 배경조사를 받은 상태가 아니므로 보안검색 우회나 조종석 접근이 허용되면 안 됨
- 승인 대상자가 맞는지 확인하기 위해 승무원 사진도 반환함
ARINC와 항공사별 인증 시스템
- ARINC는 Collins Aerospace의 자회사이며, TSA로부터 KCM 운영을 맡은 것으로 보임
- ARINC는 조종사와 승무원이 KCM 상태를 확인하는 온라인 웹사이트와, 항공사 간 승인 요청을 라우팅하는 API 같은 중앙 구성요소를 운영함
- 각 항공사는 KCM과 CASS에 참여하기 위해 자체 인증 시스템을 운영하는 것으로 보이며, 이 시스템은 ARINC의 허브와 상호작용함
- TSA와 항공사는
CockpitAccessRequest,CrewVerificationRequest같은 요청을 ARINC에 보낼 수 있음 - ARINC는 요청을 해당 항공사 시스템으로 라우팅하고 응답을 받음
- TSA와 항공사는
- KCM에는 현재 77개 항공사가 참여 중임
- 대형 항공사는 자체 시스템을 만들었을 가능성이 있지만, 소형 항공사가 KCM이나 CASS 요청에 어떻게 응답하는지가 조사 대상이 됨
FlyCASS에서 발견된 SQL 인젝션
- 연구자들은 인증 시스템을 실제 운영하는 벤더를 찾다가 FlyCASS라는 사이트를 발견함
- FlyCASS는 소형 항공사에 CASS용 웹 기반 인터페이스를 제공함
- 각 항공사는 별도 로그인 페이지를 가졌고, Air Transport International(8C)은
/ati에서 접근 가능했음
- 로그인 페이지에서 사용자명에 작은따옴표를 넣자 즉시 MySQL 오류가 반환됨
- 사용자명이 로그인 SQL 쿼리에 직접 삽입되는 것으로 보였음
- sqlmap으로 SQL 인젝션 문제가 확인됨
- 사용자명
' or '1'='1과 비밀번호') OR MD5('1')=MD5('1조합으로 Air Transport International의 관리자 계정에 로그인할 수 있었음
관리자 권한으로 KCM/CASS 승인 사용자 추가
- FlyCASS는 참여 항공사를 위해 KCM과 CASS 모두를 운영하고 있었음
- Air Transport International 관리자 권한을 얻자, 해당 항공사에 연결된 조종사와 승무원 목록을 관리할 수 있었음
- 새 직원을 항공사에 추가할 때 추가 확인이나 인증은 없었음
- 항공사 관리자는 누구든 KCM과 CASS 승인 사용자로 추가할 수 있었음
- 테스트용으로
Test TestOnly라는 직원을 만들고 선택한 테스트 사진을 넣은 뒤 KCM과 CASS 접근 권한을 부여함- 이후 Query 기능으로 확인했을 때, 테스트 사용자는 KCM과 CASS 모두에서 승인 상태였음
- 기본적인 SQL 인젝션 지식만으로 사이트에 로그인해 임의 사용자를 KCM과 CASS에 추가할 수 있는 상태였음
- 결과적으로 보안검색을 건너뛰고 상업용 여객기 조종석 접근까지 가능해질 수 있었음
- 첫 문제를 발견한 직후 공개 절차가 시작됐고, 그 외에도 심각한 문제가 여러 개 더 발견됨
공개 절차와 TSA의 반응
- 적절한 공개 연락처를 찾는 과정부터 쉽지 않았음
- FlyCASS가 한 사람이 운영하는 것으로 보여, 처음부터 FlyCASS에 연락해 놀라게 하고 싶지 않았음
- 2024년 4월 23일 Department of Homeland Security에 문제가 공개됐고, DHS는 이를 인지했으며 “매우 심각하게 받아들이고 있다”고 확인함
- 이후 FlyCASS는 KCM/CASS에서 비활성화됐고, 나중에 문제가 수정된 것으로 보임
- 문제가 수정된 뒤 안전한 공개를 조율하려 했지만, DHS는 응답을 중단함
- TSA 공보실은 취약점 영향을 부인하는 설명을 냄
- TSA는 새 KCM 회원에게 바코드를 발급하기 전에 심사 절차가 시작되므로 이 취약점으로 KCM 체크포인트에 접근할 수 없다고 했음
- 그러나 KCM 체크포인트 이용에 KCM 바코드는 필수가 아니며, TSO가 항공사 직원 ID를 수동 입력할 수 있음
- 연구자들이 이를 TSA에 알린 뒤, TSA는 직원 ID 수동 입력을 언급한 웹사이트 섹션을 삭제했고 정정 요청에는 응답하지 않음
- TSO가 쓰는 인터페이스는 여전히 직원 ID 수동 입력을 허용하는 것으로 확인됨
가능했던 추가 공격과 공개 타임라인
- 취약점으로 기존 KCM 회원을 수정할 수 있었기 때문에, 기존 등록 사용자의 사진과 이름 변경도 가능했음
- 이 방식은 신규 회원 심사 절차가 있더라도 이를 우회할 가능성이 있었음
- 등록되지 않은 KCM 바코드를 확보할 수 있다면, KCM 웹사이트에서 이를 직원 ID에 직접 등록할 수도 있었음
- 공개 타임라인:
- 2024-04-23: ARINC와 FAA에 최초 공개
- 2024-04-24: CISA를 통해 DHS에 추가 공개
- 2024-04-25: DHS CISO가 해결 작업 중이라고 확인
- 2024-05-07: DHS CISO가 FlyCASS가 KCM/CASS에서 분리됐다고 확인
- 2024-05-17: TSA 설명에 대해 DHS CISO에 후속 연락했으나 응답 없음
- 2024-06-04: TSA 설명에 대해 DHS CISO에 다시 후속 연락했으나 응답 없음