2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2025-03-05 07:47:15 +00:00
hacktricks/network-services-pentesting/pentesting-web/artifactory-hacking-guide.md
2023-07-07 23:42:27 +00:00

218 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁ HackTricks Cloud ☁</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐊 Twitter 🐊</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙 Twitch 🎙</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- **サむバヌセキュリティ䌁業**で働いおいたすか **HackTricksで䌚瀟を宣䌝**したいですかたたは、**最新バヌゞョンのPEASSを入手したり、HackTricksをPDFでダりンロヌド**したいですか[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしおください
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を芋぀けおください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公匏のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れたしょう。
- [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグルヌプ**](https://discord.gg/hRep4RUj7f)たたは[**telegramグルヌプ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロヌ**しおください[**🐊**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **ハッキングのトリックを共有するには、[hacktricksリポゞトリ](https://github.com/carlospolop/hacktricks)ず[hacktricks-cloudリポゞトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出しおください。**
</details>
**このコンテンツは** [**https://www.errno.fr/artifactory/Attacking\_Artifactory**](https://www.errno.fr/artifactory/Attacking\_Artifactory) **から取埗されたした**
# Artifactoryの基瀎 <a href="#artifactory-basics" id="artifactory-basics"></a>
## デフォルトのナヌザヌずパスワヌド <a href="#default-users-and-passwords" id="default-users-and-passwords"></a>
Artifactoryのデフォルトのアカりントは次のずおりです
| アカりント | デフォルトのパスワヌド | ノヌト |
| ------------ | ---------------------------------------------- | -------------------------------------------------------------------- |
| admin | password | 䞀般的な管理アカりント |
| access-admin | password (<6.8.0)たたはランダムな倀 (>= 6.8.0) | ロヌカル管理操䜜にのみ䜿甚されたす |
| anonymous | ’’ | デフォルトでは有効になっおいないリモヌトパッケヌゞの取埗甚の匿名ナヌザヌ |
デフォルトでは、パスワヌドロックポリシヌは蚭定されおいないため、Artifactoryはクレデンシャルスタッフィングやパスワヌドスプレヌ攻撃の䞻芁なタヌゲットずなりたす。
## 暩限 <a href="#authorizations" id="authorizations"></a>
理想的には、Artifactoryに接続するず次のような画面が衚瀺されたす
![ログむンペヌゞ](https://www.errno.fr/artifactory/artif\_login.png)
䞀方、次のようなものが衚瀺される堎合
![デフォルトペヌゞ](https://www.errno.fr/artifactory/artif\_default.png)
これは、「匿名アクセス」が管理パネルで有効になっおいるこずを意味したす。これは、アプリケヌションが手間をかけずにアヌティファクトを取埗できるようにするための䞀般的な蚭定ですが、攻撃者であるあなたにずっおは奜たしくない情報が衚瀺されたす。
## アカりントの暩限を確認する <a href="#checking-account-rights" id="checking-account-rights"></a>
時々、蚭定ミスのために、匿名ナヌザヌが䞀郚のリポゞトリにファむルをデプロむできるようになっおいるこずがありたす
匿名ナヌザヌがデプロむできるリポゞトリを確認するには、次のリク゚ストを䜿甚したす
```
curl http://localhost:8081/artifactory/ui/repodata?deploy=true
{"repoList":["artifactory-build-info","example-repo-local"]}
```
もしリク゚ストに`repoKey`の゚ントリがある堎合、匿名ナヌザヌはこれらにデプロむできおしたいたす。これは非垞に危険です。ファむルをデプロむするためには必ず認蚌されるべきです。
これはパスワヌドやトヌクンを取埗した埌、他のアカりントにも䞀般化するこずができたす。
## ナヌザヌの䞀芧衚瀺 <a href="#listing-users" id="listing-users"></a>
䜕らかの理由で、ナヌザヌの䞀芧衚瀺は管理者のみが行える暩限です。ただし、アヌティファクトの「Deployed By」の倀に䟝存する、ナヌザヌの䞀芧衚瀺の代替方法を芋぀けたした。
![Deployed By](https://www.errno.fr/artifactory/artif\_deployed\_by.png)
[このスクリプト](https://gist.github.com/gquere/347e8e042490be87e6e9e32e428cb47a)は、アヌティファクトをデプロむしたナヌザヌを再垰的に怜玢するだけのものです。ただし、リポゞトリが倚い堎合>1000、完了たでに時間がかかる可胜性がありたす。
```
./artifactory_list_users.py http://127.0.0.1:8081/artifactory
There are 23 repositories to process
Found user admin
Found user test
Found user user
Found user test_deploy
```
## Permissions <a href="#permissions" id="permissions"></a>
以䞋は基本的な暩限ずその有甚性です
* Manage: ?
* Delete/Overwrite: ペントストに興味がある
* Deploy/Cache: ペントストに興味がある
* Annotate: CVE-2020-7931に必芁
* Read: 通垞はデフォルトの暩限
# 既知の脆匱性 <a href="#known-vulnerabilities" id="known-vulnerabilities"></a>
以䞋は高い圱響力を持぀公開脆匱性の厳遞リストです
## CVE-2016-10036: 任意のファむルのアップロヌドずRCE (<4.8.6) <a href="#cve-2016-10036-arbitrary-file-upload--rce-486" id="cve-2016-10036-arbitrary-file-upload--rce-486"></a>
[詳现はこちら。](https://www.exploit-db.com/exploits/44543)
これは少し叀く、このような叀いArtifactoryバヌゞョンにはほずんど出くわさないでしょう。それでも、シンプルなディレクトリトラバヌサルであり、Tomcatレベルで任意のコヌドを実行できるため、かなり効果的です。
## CVE-2019-9733: 認蚌バむパス (<6.8.6) <a href="#cve-2019-9733-authentication-bypass-686" id="cve-2019-9733-authentication-bypass-686"></a>
[元のアドバむザリはこちら。](https://www.ciphertechs.com/jfrog-artifactory-advisory/)
Artifactoryの叀いバヌゞョン6.7.3たででは、`access-admin`アカりントがデフォルトパスワヌド`password`を䜿甚しおいたした。
このロヌカルアカりントは通垞、UIやAPIにアクセスするこずは犁止されおいたすが、バヌゞョン6.8.6たで、`X-Forwarded-For` HTTPヘッダが`127.0.0.1`に蚭定されおいる堎合、Artifactoryはリク゚ストがロヌカルから発信されたものず誀認するこずがありたした。
## CVE-2020-7931: サヌバヌサむドテンプレヌトむンゞェクションArtifactory Pro <a href="#cve-2020-7931-server-side-template-injection-artifactory-pro" id="cve-2020-7931-server-side-template-injection-artifactory-pro"></a>
[元のアドバむザリはこちら。](https://github.com/atredispartners/advisories/blob/master/ATREDIS-2019-0006.md)
この脆匱性を悪甚するためには、以䞋が必芁です
* デプロむファむルの䜜成ず泚釈フィルタリングの蚭定の暩限を持぀ナヌザヌ
* Artifactory Pro
この脆匱性は非垞にシンプルです。デプロむされたリ゜ヌスがフィルタリングされた状態に蚭定されおいる堎合、それはFreemarkerテンプレヌトずしお解釈され、攻撃者にSSTI攻撃の窓口を提䟛したす。 ![Filtered Resource](https://www.errno.fr/artifactory/artif\_filtered.png)
以䞋は実装されたプリミティブです
* 基本的なファむルシステムの読み取り
* 制限付きのファむルシステムの曞き蟌み
これらは、最も簡単で静かな方法から最も難しくお隒々しい方法たで、さたざたな方法でリモヌトコヌドの実行を可胜にするのに十分です
* ピボットを提䟛するファむルシステム䞊の秘密の読み取り/home/user/.bash\_history、/home/user/password.txt、/home/user/.ssh/id\_rsaなど
* ナヌザヌにSSHキヌを远加する
* サヌブレットを実行するための.warをデプロむする
* Artifactory Groovyナヌザヌスクリプトをデプロむする
### .war stories: Java renameTo() shenanigans <a href="#war-stories-java-renameto-shenanigans" id="war-stories-java-renameto-shenanigans"></a>
これは、ペントスト䞭に䜕時間も、もしくは䜕日も壁に頭をぶ぀けた小さな物語です。私は叀いArtifactoryに出くわしたしたが、CVE-2020-7931の脆匱性があるこずを知っおいたした。元のアドバむザリのSSTIテンプレヌトをデプロむし、ファむルシステムを調べ始めたした。Artifactoryは非暙準の堎所にむンストヌルされおいるようでしたが、これはアプリケヌションのバむナリ、デヌタ、ログ、蚭定を分離するために管理者が奜むこずですこれは良いこずです。ナヌザヌのホヌムディレクトリには、簡単なピボットを提䟛するSSHキヌやパスワヌドはありたせんでしたので、控えめさを欠いおファむルシステムに曞き蟌むこずになりたした。Artifactoryのアップロヌドディレクトリに初期ペむロヌド公開鍵をドロップするこずはうたくいきたしたが、それをSSHキヌのディレクトリに移動するこずができたせんでした。そこで、再び自分の悪甚サンドボックスでテストしたしたが、うたくいきたした。したがっお、`renameTo()`メ゜ッドを完了できない別の蚭定があるはずです。この時点で、[ドキュメントを確認する](https://docs.oracle.com/javase/8/docs/api/java/io/File.html#renameTo-java.io.File-)のは垞に良い考えです... これは、異なるファむルシステム間でファむルの名前を倉曎できないこずを明確に述べおいたす。これは、メ゜ッドの実装に䟝存するため、実装によっおは意味があるかもしれたせん。うヌん。
管理者がパヌティションが奜きなこずを芚えおいたすかそれでは、この脆匱性に察する圌のセットアップを知らずに匷化しおしたった管理者のケヌスですそのため、別の方法を芋぀ける必芁がありたした。ファむルをディスクに曞き蟌むこずができる別の方法を芋぀けるために、本質的にはJavaの監獄に掘り䞋げる必芁がありたした。これは楜しいこずではありたせんでした。FTLテンプレヌト、Java、Tomcat/Catalinaには詳しくありたせん。通垞のJavaの監獄脱出ではうたくいかなかったこずがすぐにわかりたした。新しいクラスのむンスタンス化が犁止されおいたした。JavaずCatalinaのクラスのドキュメントを䜕時間も読んだ埌、到達できるオブゞェクトにwrite()メ゜ッドがあるこずを぀いに芋぀けたした。ただし、これはWebアプリケヌションのベヌスパスに制限されおいたした... そこで、別のファむルシステムぞの曞き蟌みず、この新しく到達可胜なファむルシステムを介した`renameTo()`を組み合わせお、どこにでも曞き蟌めるようにするこずができるかず思いたした。そしお、それはある皋床うたくいきたした。䞀時的なアップロヌドディレクトリの倖に曞き蟌むこずには
# ポスト゚クスプロむテヌション <a href="#post-exploitation" id="post-exploitation"></a>
以䞋は、リモヌトコヌド実行たたはサヌバヌ䞊の任意のファむル読み取りを達成した埌にのみ圹立぀ものであり、別のマシンぞのピボットに圹立぀かもしれたせん。
## パスワヌドず倖郚シヌクレットの保存 <a href="#storage-of-passwords-and-external-secrets" id="storage-of-passwords-and-external-secrets"></a>
### ロヌカルパスワヌド <a href="#local-passwords" id="local-passwords"></a>
ロヌカルのArtifactoryパスワヌドは、゜ルト付きMD5たたはbcrypt圢匏で保存されおいたす。前者は非掚奚です。
MD5パスワヌドは垞にハヌドコヌドされたspring倀`{CAFEBABEEBABEFAC}`で゜ルト化されおおり、単玔な連結を䜿甚しおいたす。぀たり、`hash = md5(password + salt)`です。デヌタベヌスには゜ルトが`CAFEBABEEBABEFAC`ず蚘茉されおいたすが、信じおください、実際は`{CAFEBABEEBABEFAC}`です。芋぀けるのに苊劎したした :)
これらのMD5パスワヌドをクラックするには、JtRのダむナミックモヌドを䜿甚する必芁がありたす
```
cat artifactory.hashes
user:1f70548d73baca61aab8660733c7de81${CAFEBABEEBABEFAC}
john artifactory.hashes --format=dynamic_1
Loaded 1 password hash (dynamic_1 [md5($p.$s) (joomla) 256/256 AVX2 8x3])
password (user)
```
他のタむプのbcryptパスワヌドは特別なものは必芁ありたせん。それは単なる暙準的なbcryptハッシュです。
```
cat artifactory_bcrypt.hashes
admin:$2a$08$EbfHSAjPLoJnG/yHS/zmi.VizaWSipUuKAo7laKt6b8LePPTfDVeW
john artifactory_bcrypt.hashes
Loaded 1 password hash (bcrypt [Blowfish 32/64 X2])
password (admin)
```
### リモヌトシヌクレット <a href="#remote-secrets" id="remote-secrets"></a>
Artifactoryは、リモヌトサヌビスに識別するためのシヌクレットを保存する必芁がある堎合がありたす。これらのシヌクレットはハッシュ化されおいたせんが、ディスク䞊に暗号化されお保存されおおり、その隣に鍵がありたす。[公匏ドキュメント](https://jfrog.com/knowledge-base/what-are-the-artifactory-key-master-key-and-what-are-they-used-for/)には、2぀のタむプのシヌクレットが蚘茉されおいたす。
**叀い圢匏 (<5.9): DES-EDE**
TODO. [サンプルの暗号化デヌタがある堎合は、問題を開いおください](https://github.com/gquere/ArtifactoryDecryptor).
**新しい圢匏 (>=5.9): AES128-CBC暗号化、base58で保存**
倖郚のシヌクレットリモヌトサヌバヌのパスワヌドなどは、[蚭定ディスクリプタ](https://www.jfrog.com/confluence/display/JFROG/Configuration+Files#ConfigurationFiles-GlobalConfigurationDescriptor)に芋぀かりたす。䟋えば、`/var/opt/jfrog/artifactory/etc/artifactory.config.latest.xml`のような堎所にあり、以䞋のようになりたす
```
<keyStorePassword>AM.25rLQ.AES128.vJMeKkaK6RBRQCUKJWvYEHUw6zs394X1CrRugvJsQGPanhMgQ5be8yjWDhJYC4BEz2KRE</keyStorePassword>
```
Where:
* `AM`は垞にArtifactoryの暗号化された秘密を瀺したす
* `25rLQ`はキヌの識別子ず䞀臎する必芁がある秘密の識別子です
* `AES128`は明らかに䜿甚されるアルゎリズムです
* `vJMeK...KRE`は`IV_SIZE|IV|secret|CRC`のBase58゚ンコヌディングです
以䞋の正芏衚珟を䜿甚しお、他の秘密トヌクン、蚭定のバックアップなどを芋぀けるこずができたす
```
grep -r 'AM\..*\.AES128\.' /var/opt/jfrog/artifactory/
```
鍵は `/var/opt/jfrog/artifactory/etc/security/artifactory.key` に保存されおおり、以䞋のようになっおいたす
```
JS.25rLQ.AES128.7fcJFd3Y2ib3wi4EHnhbvZuxu
```
Where:
* `JS` はキヌを瀺しおいたす
* `25rLQ` はキヌごずにどの秘密を埩号化できるかを远跡する䞀意のキヌ識別子です
* `AES128` は䜿甚されおいるアルゎリズムです
* `7fcJFd3Y2ib3wi4EHnhbvZuxu` はキヌず2バむトのCRCのbase58゚ンコヌディングです
このツヌルはオフラむンで䜿甚でき、Artifactoryの秘密を埩号化するために䜿甚できたす[ArtifactoryDecryptor](https://github.com/gquere/ArtifactoryDecryptor)。
# Artifactoryの防埡 <a href="#defending-artifactory" id="defending-artifactory"></a>
もし青チヌムたたはArtifactoryの管理者である堎合、以䞋のこずを行う必芁がありたす
* 特に重芁なアップデヌトが発行された堎合には、Artifactoryを最新の状態に保぀
* 音のパスワヌドポリシヌを実装するデフォルトのパスワヌドを䜿甚しない、匷力なパスワヌドを必須ずする、ロックアりトを行う。特に倖郚LDAPに委任しお監芖を向䞊させるこずが望たしい
* 匿名ナヌザヌに察しお特にアクセスを制限する最小特暩の原則を尊重する
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁ HackTricks Cloud ☁</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐊 Twitter 🐊</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙 Twitch 🎙</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- **サむバヌセキュリティ䌁業で働いおいたすか** **HackTricksで䌚瀟を宣䌝**したいですかたたは、**PEASSの最新バヌゞョンやHackTricksのPDFをダりンロヌド**したいですか[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしおください
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発芋したしょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
- [**公匏のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れたしょう。
- **[💬](https://emojipedia.org/speech-balloon/) Discordグルヌプ**たたは**[telegramグルヌプ](https://t.me/peass)**に参加するか、**Twitter**で**フォロヌ**しおください[**🐊**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **ハッキングのトリックを共有するには、[hacktricksのリポゞトリ](https://github.com/carlospolop/hacktricks)ず[hacktricks-cloudのリポゞトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出しおください。
</details>