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

219 lines
19 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 20:35:28 +02:00
<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>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**💬**](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)**。**
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。**
2022-04-28 16:01:33 +00:00
</details>
2023-07-07 23:42:27 +00:00
**このコンテンツは** [**https://www.errno.fr/artifactory/Attacking\_Artifactory**](https://www.errno.fr/artifactory/Attacking\_Artifactory) **から取得されました**
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
# Artifactoryの基礎 <a href="#artifactory-basics" id="artifactory-basics"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## デフォルトのユーザーとパスワード <a href="#default-users-and-passwords" id="default-users-and-passwords"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
Artifactoryのデフォルトのアカウントは次のとおりです
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
| アカウント | デフォルトのパスワード | ノート |
| ------------ | ---------------------------------------------- | -------------------------------------------------------------------- |
2023-07-07 23:42:27 +00:00
| admin | password | 一般的な管理アカウント |
| access-admin | password (<6.8.0)またはランダムな値 (>= 6.8.0) | ローカル管理操作にのみ使用されます |
| anonymous | | デフォルトでは有効になっていないリモートパッケージの取得用の匿名ユーザー |
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
デフォルトでは、パスワードロックポリシーは設定されていないため、Artifactoryはクレデンシャルスタッフィングやパスワードスプレー攻撃の主要なターゲットとなります。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## 権限 <a href="#authorizations" id="authorizations"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
理想的には、Artifactoryに接続すると次のような画面が表示されます
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
![ログインページ](https://www.errno.fr/artifactory/artif\_login.png)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
一方、次のようなものが表示される場合:
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
![デフォルトページ](https://www.errno.fr/artifactory/artif\_default.png)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これは、「匿名アクセス」が管理パネルで有効になっていることを意味します。これは、アプリケーションが手間をかけずにアーティファクトを取得できるようにするための一般的な設定ですが、攻撃者であるあなたにとっては好ましくない情報が表示されます。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## アカウントの権限を確認する <a href="#checking-account-rights" id="checking-account-rights"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
時々、設定ミスのために、匿名ユーザーが一部のリポジトリにファイルをデプロイできるようになっていることがあります!
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
匿名ユーザーがデプロイできるリポジトリを確認するには、次のリクエストを使用します:
```
2020-09-28 08:31:31 +00:00
curl http://localhost:8081/artifactory/ui/repodata?deploy=true
{"repoList":["artifactory-build-info","example-repo-local"]}
```
2023-07-07 23:42:27 +00:00
もしリクエストに`repoKey`のエントリがある場合、匿名ユーザーはこれらにデプロイできてしまいます。これは非常に危険です。ファイルをデプロイするためには必ず認証されるべきです。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これはパスワードやトークンを取得した後、他のアカウントにも一般化することができます。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## ユーザーの一覧表示 <a href="#listing-users" id="listing-users"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
何らかの理由で、ユーザーの一覧表示は管理者のみが行える権限です。ただし、アーティファクトの「Deployed By」の値に依存する、ユーザーの一覧表示の代替方法を見つけました。
2020-09-28 08:31:31 +00:00
2021-11-30 16:46:07 +00:00
![Deployed By](https://www.errno.fr/artifactory/artif\_deployed\_by.png)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
[このスクリプト](https://gist.github.com/gquere/347e8e042490be87e6e9e32e428cb47a)は、アーティファクトをデプロイしたユーザーを再帰的に検索するだけのものです。ただし、リポジトリが多い場合(>1000、完了までに時間がかかる可能性があります。
```
2020-09-28 08:31:31 +00:00
./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
```
2022-05-01 13:49:36 +01:00
## Permissions <a href="#permissions" id="permissions"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
以下は基本的な権限とその有用性です:
2020-09-28 08:31:31 +00:00
* Manage: ?
2023-07-07 23:42:27 +00:00
* Delete/Overwrite: ペントストに興味がある
* Deploy/Cache: ペントストに興味がある
* Annotate: CVE-2020-7931に必要
* Read: 通常はデフォルトの権限
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
# 既知の脆弱性 <a href="#known-vulnerabilities" id="known-vulnerabilities"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
以下は高い影響力を持つ公開脆弱性の厳選リストです:
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## 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>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
[詳細はこちら。](https://www.exploit-db.com/exploits/44543)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これは少し古く、このような古いArtifactoryバージョンにはほとんど出くわさないでしょう。それでも、シンプルなディレクトリトラバーサルであり、Tomcatレベルで任意のコードを実行できるため、かなり効果的です。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## CVE-2019-9733: 認証バイパス (<6.8.6) <a href="#cve-2019-9733-authentication-bypass-686" id="cve-2019-9733-authentication-bypass-686"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
[元のアドバイザリはこちら。](https://www.ciphertechs.com/jfrog-artifactory-advisory/)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
Artifactoryの古いバージョン6.7.3まで)では、`access-admin`アカウントがデフォルトパスワード`password`を使用していました。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
このローカルアカウントは通常、UIやAPIにアクセスすることは禁止されていますが、バージョン6.8.6まで、`X-Forwarded-For` HTTPヘッダが`127.0.0.1`に設定されている場合、Artifactoryはリクエストがローカルから発信されたものと誤認することがありました。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## 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>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
[元のアドバイザリはこちら。](https://github.com/atredispartners/advisories/blob/master/ATREDIS-2019-0006.md)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
この脆弱性を悪用するためには、以下が必要です:
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
* デプロイ(ファイルの作成)と注釈(フィルタリングの設定)の権限を持つユーザー
2020-09-28 08:31:31 +00:00
* Artifactory Pro
2023-07-07 23:42:27 +00:00
この脆弱性は非常にシンプルです。デプロイされたリソースがフィルタリングされた状態に設定されている場合、それはFreemarkerテンプレートとして解釈され、攻撃者にSSTI攻撃の窓口を提供します。 ![Filtered Resource](https://www.errno.fr/artifactory/artif\_filtered.png)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
以下は実装されたプリミティブです:
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
* 基本的なファイルシステムの読み取り
* 制限付きのファイルシステムの書き込み
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これらは、最も簡単で静かな方法から最も難しくて騒々しい方法まで、さまざまな方法でリモートコードの実行を可能にするのに十分です:
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
* ピボットを提供するファイルシステム上の秘密の読み取り(/home/user/.bash\_history、/home/user/password.txt、/home/user/.ssh/id\_rsaなど
* ユーザーにSSHキーを追加する
* サーブレットを実行するための.warをデプロイする
* Artifactory Groovyユーザースクリプトをデプロイする
2020-09-28 08:31:31 +00:00
2022-05-01 13:49:36 +01:00
### .war stories: Java renameTo() shenanigans <a href="#war-stories-java-renameto-shenanigans" id="war-stories-java-renameto-shenanigans"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これは、ペントスト中に何時間も、もしくは何日も壁に頭をぶつけた小さな物語です。私は古い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-)のは常に良い考えです... これは、異なるファイルシステム間でファイルの名前を変更できないことを明確に述べています。これは、メソッドの実装に依存するため、実装によっては意味があるかもしれません。うーん。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
管理者がパーティションが好きなことを覚えていますかそれでは、この脆弱性に対する彼のセットアップを知らずに強化してしまった管理者のケースですそのため、別の方法を見つける必要がありました。ファイルをディスクに書き込むことができる別の方法を見つけるために、本質的にはJavaの監獄に掘り下げる必要がありました。これは楽しいことではありませんでした。FTLテンプレート、Java、Tomcat/Catalinaには詳しくありません。通常のJavaの監獄脱出ではうまくいかなかったことがすぐにわかりました。新しいクラスのインスタンス化が禁止されていました。JavaとCatalinaのクラスのドキュメントを何時間も読んだ後、到達できるオブジェクトにwrite()メソッドがあることをついに見つけました。ただし、これはWebアプリケーションのベースパスに制限されていました... そこで、別のファイルシステムへの書き込みと、この新しく到達可能なファイルシステムを介した`renameTo()`を組み合わせて、どこにでも書き込めるようにすることができるかと思いました。そして、それはある程度うまくいきました。一時的なアップロードディレクトリの外に書き込むことには
# ポストエクスプロイテーション <a href="#post-exploitation" id="post-exploitation"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
以下は、リモートコード実行またはサーバー上の任意のファイル読み取りを達成した後にのみ役立つものであり、別のマシンへのピボットに役立つかもしれません。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
## パスワードと外部シークレットの保存 <a href="#storage-of-passwords-and-external-secrets" id="storage-of-passwords-and-external-secrets"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
### ローカルパスワード <a href="#local-passwords" id="local-passwords"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
ローカルのArtifactoryパスワードは、ソルト付きMD5またはbcrypt形式で保存されています。前者は非推奨です。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
MD5パスワードは常にハードコードされたspring値`{CAFEBABEEBABEFAC}`でソルト化されており、単純な連結を使用しています。つまり、`hash = md5(password + salt)`です。データベースにはソルトが`CAFEBABEEBABEFAC`と記載されていますが、信じてください、実際は`{CAFEBABEEBABEFAC}`です。見つけるのに苦労しました :)
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
これらのMD5パスワードをクラックするには、JtRのダイナミックモードを使用する必要があります
```
2020-09-28 08:31:31 +00:00
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)
```
2023-07-07 23:42:27 +00:00
他のタイプのbcryptパスワードは特別なものは必要ありません。それは単なる標準的なbcryptハッシュです。
```
2020-09-28 08:31:31 +00:00
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)
```
2023-07-07 23:42:27 +00:00
### リモートシークレット <a href="#remote-secrets" id="remote-secrets"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
Artifactoryは、リモートサービスに識別するためのシークレットを保存する必要がある場合があります。これらのシークレットはハッシュ化されていませんが、ディスク上に暗号化されて保存されており、その隣に鍵があります。[公式ドキュメント](https://jfrog.com/knowledge-base/what-are-the-artifactory-key-master-key-and-what-are-they-used-for/)には、2つのタイプのシークレットが記載されています。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
**古い形式 (<5.9): DES-EDE**
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
TODO. [サンプルの暗号化データがある場合は、問題を開いてください](https://github.com/gquere/ArtifactoryDecryptor).
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
**新しい形式 (>=5.9): AES128-CBC暗号化、base58で保存**
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
外部のシークレット(リモートサーバーのパスワードなど)は、[設定ディスクリプタ](https://www.jfrog.com/confluence/display/JFROG/Configuration+Files#ConfigurationFiles-GlobalConfigurationDescriptor)に見つかります。例えば、`/var/opt/jfrog/artifactory/etc/artifactory.config.latest.xml`のような場所にあり、以下のようになります:
```
2020-09-28 08:31:31 +00:00
<keyStorePassword>AM.25rLQ.AES128.vJMeKkaK6RBRQCUKJWvYEHUw6zs394X1CrRugvJsQGPanhMgQ5be8yjWDhJYC4BEz2KRE</keyStorePassword>
```
Where:
2023-07-07 23:42:27 +00:00
* `AM`は常にArtifactoryの暗号化された秘密を示します
* `25rLQ`はキーの識別子と一致する必要がある秘密の識別子です
* `AES128`は明らかに使用されるアルゴリズムです
* `vJMeK...KRE``IV_SIZE|IV|secret|CRC`のBase58エンコーディングです
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
以下の正規表現を使用して、他の秘密(トークン、設定のバックアップなど)を見つけることができます:
```
2020-09-28 08:31:31 +00:00
grep -r 'AM\..*\.AES128\.' /var/opt/jfrog/artifactory/
```
2023-07-07 23:42:27 +00:00
鍵は `/var/opt/jfrog/artifactory/etc/security/artifactory.key` に保存されており、以下のようになっています:
```
2020-09-28 08:31:31 +00:00
JS.25rLQ.AES128.7fcJFd3Y2ib3wi4EHnhbvZuxu
```
Where:
2023-07-07 23:42:27 +00:00
* `JS` はキーを示しています
* `25rLQ` はキーごとにどの秘密を復号化できるかを追跡する一意のキー識別子です
* `AES128` は使用されているアルゴリズムです
* `7fcJFd3Y2ib3wi4EHnhbvZuxu` はキーと2バイトのCRCのbase58エンコーディングです
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
このツールはオフラインで使用でき、Artifactoryの秘密を復号化するために使用できます[ArtifactoryDecryptor](https://github.com/gquere/ArtifactoryDecryptor)。
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
# Artifactoryの防御 <a href="#defending-artifactory" id="defending-artifactory"></a>
2020-09-28 08:31:31 +00:00
2023-07-07 23:42:27 +00:00
もし青チームまたはArtifactoryの管理者である場合、以下のことを行う必要があります
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
* 特に重要なアップデートが発行された場合には、Artifactoryを最新の状態に保つ
* 音のパスワードポリシーを実装するデフォルトのパスワードを使用しない、強力なパスワードを必須とする、ロックアウトを行う。特に外部LDAPに委任して監視を向上させることが望ましい
* 匿名ユーザーに対して特にアクセスを制限する(最小特権の原則を尊重する)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 20:35:28 +02:00
<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>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **[💬](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)**.**
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **ハッキングのトリックを共有するには、[hacktricksのリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudのリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
2022-04-28 16:01:33 +00:00
</details>