
서비스 개발시에 배포 전에 서비스 코드 또는 Commit 기록에 Password, Secret과 같은 민감 정보를 지우지 않고 배포하는 경우가 있음. 해당 문제는 이러한 취약점을 찾아내는 문제다.

문제 설명에 Git, Docker, AWS 등으로 CI/CD 파이프라인을 구성했고, 배포 했다고 한다.

git config 정보들을 /.git/config 엔드포인트에서 확인할 수 있다. 이는 웹서버에 .git이 노출되어 있음을 의미한다.
해당 내용을 살펴보면 logallrefupdates 옵션이 true 값으로 설정 되어 있으므로, 변경사항이 .git/logs/에 기록됨을 알 수 있다. 따라서 git-dumper를 활용하여 .git 정보를 이용해서 소스코드를 복구 해보도록 하겠다.

git-dumper {url} {저장할 디렉터리}

위와 같이 복구한 소스코드를 확인할 수 있다. 이제 commit 기록을 보기 위해 git log 명령을 수행하자.

git log를 보면 commit 기록을 확인할 수 있다. commit hash값도 있기 때문에 git checkout 명령으로 해당 내용들을 알아보도록 하겠다.
총 7개 Commit 중 위에서 네 번째 Commit의 message를 보면 "Inlcuded custom environmental variables" 라고 되어 있고, 환경변수 값을 포함하고 업데이트 했다는 것을 알 수 있다.
개발 편의성을 위해 환경변수 또는 file로 민감 정보를 하드코딩하여 발생하는 문제들이 많기 때문에 해당 커밋에 대해 더 자세하게 보도록 하겠다.

git checkout d7c173ad183c574109cd5c4c648ffe551755b576
경고 메세지가 발생했지만 해당 commit 시점으로 이동이 완료됐음을 알 수 있다.

이전과 달리 ls -al 명령을 수행했을 때 .env 파일이 생성됐음을 알 수 있다.

해당 파일을 보면 aws 시크릿과 해당 문제의 flag를 흭득할 수 있다.
두 번째 풀이는 해당 문제가 운영되는 pod에 접속해서 풀이 해봤다. build-code-deployment pod에 접속하면 아래와 같이 첫 번째 풀이와 같이 디렉터리 정보를 확인할 수 있다.

.git 디렉터리에 HEAD 파일을 읽어보면 아래와 같이 Commit 기록을 확인할 수 있다.

해당 풀이에선 trufflehog라는 도구를 활용할 것이다. trufflehog는 하드코딩 된 민감 정보를 스캔하는 도구다.

trufflehog . 명령으로 스캔을 하면 첫 번째 풀이와 마찬가지로 aws 접근 키, 시크릿, 해당 문제의 flag를 취득할 수 있다.
민감 정보 하드코딩 금지
인프라 접근 키, Secret과 같은 민감 정보는 환경변수, 파일에 하드코딩 하여 관리하는 것이 아닌 Harshcorp Valut, AWS Secret Manager 등과 같은 Credential 관리 서비스를 도입하여 관리 해야한다.
gitignore 활용
배포시에 민감한 정보가 담긴 파일을 gitignore 기능을 활용하여 제외 해야한다.
배포 전 스캐닝 도구를 통한 검사 수행
앞선 풀이에서 활용한 trufflehog와 같은 스캐닝 도구를 활용하여 민감 정보가 담겨 있는지 먼저 확인 해야한다.
민감 정보 수명 설정
민감 정보의 수명 설정을 통해 해당 정보가 유출되더라도 유출된 정보로 접근할 수 없도록 한다.