Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2022-41828 — [CVE-2022-41828] Удаленное выполнение кода (RCE) в драйвере JDBC Amazon AWS Redshift | Kitploit
Инструменты/GitHubGitHub/murataydemir/cve-2022-41828
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийБезопасность облачных средОбучение и ОбразованиеБезопасность Баз Данных
GitHubmurataydemir/cve-2022-41828

CVE-2022-41828

[CVE-2022-41828] Удаленное выполнение кода (RCE) в драйвере JDBC Amazon AWS Redshift

Репозиторий
4273 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

[CVE-2022-41828] Удалённое выполнение кода (RCE) в драйвере Amazon AWS Redshift JDBC


Platform Badge Ecosystem

The Amazon JDBC Driver for Redshift — это драйвер JDBC типа 4, который обеспечивает подключение к базе данных через стандартные интерфейсы прикладного программирования (API) JDBC, доступные в Java Platform, Enterprise Editions. Драйвер предоставляет доступ к Redshift из любого Java-приложения, сервера приложений или Java-апплета.

Потенциальная проблема удалённого выполнения команд существует в версиях redshift-jdbc42 2.1.0.7 и ниже. При использовании плагинов с драйвером он создаёт экземпляры плагинов на основе имён Java-классов, передаваемых через свойства подключения sslhostnameverifier, socketFactory, sslfactory и sslpasswordcallback. В затронутых версиях драйвер не проверяет, реализует ли класс плагина ожидаемый интерфейс, перед созданием экземпляра. Это может привести к загрузке произвольных Java-классов, которые осведомлённый злоумышленник, контролирующий JDBC URL, может использовать для достижения удалённого выполнения кода.

Исправления

Эта проблема исправлена в redshift-jdbc-42 версии 2.1.0.8 и выше

Обходные пути

AWS рекомендует клиентам, использующим плагины, обновиться до версии redshift-jdbc42 2.1.0.8 или выше. Известных обходных путей для этой проблемы нет.

Анализ исправления: проблема GitHub и связанные коммиты

Для исправления этой проблемы изменения были внесены в 4 разных Java-класса в коммите aws/amazon-redshift-jdbc-driver@9999659. Эти классы перечислены ниже.

  • src/main/java/com/amazon/redshift/core/SocketFactoryFactory.java
@@ -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
@@ -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
@@ -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
@@ -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

Воспроизведение: разработка уязвимого приложения и шаги эксплуатации

Для воспроизведения CVE-2022-41828 разработано уязвимое Java-приложение на базе фреймворка Spring, которое использует уязвимый драйвер redshift-jdbc42 версии 2.1.0.7 в качестве внешней библиотеки.

Скачать инструмент