원문 : https://hackerone.com/reports/827052
GitLab에서 발견된 Path Traversal 취약점으로 무려 $20,000의 바운티를 받은 보고서입니다.
취약점 및 방법
이처럼 issue를 새로 생성할 때 Description에 Markdown으로 작성할 수 있습니다.
이때 ![file](./filepath) 형식으로 파일에 대한 링크를 삽입할 수 있습니다.
아래에는 filepath로부터 파일을 가져오는 부분의 소스코드입니다.
@text.gsub(@pattern) do |markdown|
file = find_file(@source_project, $~[:secret], $~[:file])
break markdown unless file.try(:exists?)
klass = target_parent.is_a?(Namespace) ? NamespaceFileUploader : FileUploader
moved = klass.copy_to(file, target_parent)
...
def find_file(project, secret, file)
uploader = FileUploader.new(project, secret: secret)
uploader.retrieve_from_store!(file)
uploader
end
find_file내부에서 path traversal을 체크하는 로직이 없습니다. 또는 find_file하기전 인자에 대한 검증이 없습니다.
해당 보고서의 제보자는 ![a](/uploads/11111111111111111111111111111111/../../../../../../../../../../../../../../etc/passwd)로 /etc/password파일이 다운로드 가능하다는 것을 보여주었습니다.
파급력
서버내의 어떤 파일이든 접근할 수 있습니다.
원인
find_file시 path traversal에 대한 검증이 전혀 없었기 때문에 취약점이 발생하였습니다.
위의 링크는 해당 취약점을 수정한 커밋이고 내용은 아래와 같습니다.
'Security > Web' 카테고리의 다른 글
[Spamandhex 2020 Teaser] Journey #1 (XSS, Webauthn) (0) | 2020.05.15 |
---|---|
[SharkyCTF] XXExternalXX write-up (XXE) (0) | 2020.05.11 |
[버그바운티 write-ups] OTP Verification bypass (0) | 2020.04.25 |
[BSidesSF 2020 CTF] Recipes Write-up (0) | 2020.03.02 |
[BSidesSF 2020 CTF] SCP-1 Write-up (SCP bypass) (0) | 2020.02.27 |