Comment savoir si mon site Drupal est composé de l'exploit SA-CORE-2018-002 - mars 2018?


9

Exploit qui vient d'être publié: https://www.drupal.org/sa-core-2018-002 --- Cœur Drupal - Hautement critique - Exécution de code à distance - SA-CORE-2018-002

  • Comment savoir si quelqu'un a utilisé cet exploit pour pirater mon site?
  • Que peuvent-ils faire avec cet exploit s'il est exécuté correctement?
  • Je ne peux pas mettre à jour mes sites Drupal maintenant, quelle est une bonne alternative pour réparer facilement ce trou?

1
Je voulais lier ceci à votre article sur le dernier gros exploit au cas où cela serait
Christia

2
Il est traçable dans vos journaux d'accès. L'exécution de code à distance rend cela très critique. Tout code PHP peut être exécuté !. Appliquer les patchs dès que possible - voir la réponse de Christia
rémy

1
To our knowledge the issue is not currently being exploited.les chances sont les plus basses.
Pas de Sssweat

1
Les chances sont très faibles qu'il a déjà été exploité avant la publication de l'avis de sécurité, mais pas si bas qu'il ne sera pas exploité très bientôt.
rooby

4
C'est trivial. N'attendez pas pour voir s'il est exploité, il suffit de le patcher.
Kevin

Réponses:


8

Qu'est-ce qui pourrait arriver

J'ai eu un site Drupal personnel piraté pendant Drupalgeddon, un exploit de gravité similaire (bien que d'un type différent). En termes de "ce qui pourrait arriver", dans ce cas, le pirate a mis plusieurs fichiers "de porte dérobée" dans ma base de code (je connaissais très peu de développement à l'époque, et je n'avais pas de référentiel Git), à partir duquel il pouvait envoyer des spams . Le domaine impliqué a été mis sur liste noire dans les filtres anti-spam, et c'était un énorme gâchis de pouvoir envoyer des e-mails depuis ce domaine pendant plusieurs mois après l'avoir conservé.

Étant donné que cette vulnérabilité permet l'exécution de code à distance, l'attaquant pourrait vraisemblablement installer des modules pour exécuter des attaques de phishing, exécuter des commandes sur la ligne de commande avec php exec (), voler des mots de passe et ainsi compromettre une grande partie de votre serveur. Les dommages peuvent aller de quelque chose d'aussi simple que le recrutement de votre machine en tant que moteur de spam ou nœud de botnet, ou si vous avez des informations sensibles, l'attaquant peut les voler et les revendre ou vous faire chanter, selon les informations et les motivations de l'attaquant.

Comment savoir si vous avez été piraté

La plupart du temps, votre site ne sera pas dégradé. Lorsque deux groupes de script kiddies de 14 ans s'affrontent, vous pouvez voir un site défiguré avec des images de chèvre (NSFW), mais à moins que le pirate ait quelque chose contre vous personnellement, il ne le fera pas. Le but du pirate est soit l'argent, soit la capacité de commettre des délits avec l'ordinateur de quelqu'un d'autre.

Maintenant, avec cela à l'esprit, les choses courantes que vous verrez sont de nouveaux utilisateurs en cours de création (en particulier les utilisateurs administrateurs), et dans les journaux, vous pouvez voir une IP particulière envoyer un seul type de demande (anormale). Dans le cas Drupalgeddon, j'ai pu le comprendre en voyant les requêtes POST vers un fichier php dans mon journal d'accès.

Si vous ne pouvez pas corriger votre site tout de suite

Si vous ne pouvez pas corriger le site maintenant, je vous recommande de couper le serveur apache / nginx afin que personne ne puisse accéder à votre site. Ou, demandez au serveur de diriger tout le trafic vers une page HTML expliquant que vous êtes en panne pour maintenance, alias «mode de maintenance matérielle». Dans tous les cas, vous ne souhaitez pas permettre à un visiteur de tirer sur Drupal, jusqu'à ce que vous puissiez obtenir une mise à niveau ou un correctif.

Et en repensant à mon site piraté, rappelez-vous que les premières attaques Drupalgeddon ont commencé 7 heures après la sortie, et c'était sous la forme d'un script qui piratait automatiquement des milliers de sites. Bouge rapidement!

Si vous êtes piraté

J'espère que vous avez une sauvegarde, auquel cas le meilleur pari est de "neutraliser tout le site depuis l'orbite" et de recommencer avec un nouveau serveur. J'ai effectué une vérification manuelle de la base de données et des fichiers une fois parce que je n'avais pas Git et des sauvegardes régulières en place - cela prend très longtemps, mais si cela se produit, prenez une profonde respiration et apprenez Git et apprenez à configurer un environnement de sauvegarde approprié. Si vous avez une entreprise et son site client, dites-leur la vérité dès le départ. Vous les perdrez probablement, mais mieux vaut perdre un client (vous pouvez en obtenir de nouveaux) que votre réputation.


10

Comment savoir si quelqu'un a utilisé cet exploit pour pirater mon site?

Votre site Drupal 7 ou 8 peut subir une perte ou un vol de données, les données peuvent être supprimées, supprimées ou modifiées, causant des ravages sur le site de nombreuses manières différentes.

Consultez cet article Stack Exchange pour des informations générales sur la vérification pour voir si votre site Web a été piraté.

Que peuvent-ils faire avec cet exploit s'il est exécuté correctement?

L'exploit est une vulnérabilité d'exécution de code à distance, ce qui signifie que toutes les données peuvent être affectées.

Cet exploit a reçu un score de risque de 21/25, ce qui est presque le plus élevé qu'il obtient. Ce score de risque définit également les vulnérabilités suivantes, entre autres:

  • AC (complexité d'accès): facile (aucune compétence) à accéder et à exploiter
  • A (Authentification): aucune authentification spéciale n'est requise
  • Cl (Impact sur la confidentialité): toutes les données non publiques sont accessibles
  • II (impact sur l'intégrité): toutes les données peuvent être modifiées ou supprimées

En savoir plus sur la notation des risques et les définitions ici .

Je ne peux pas mettre à jour mes sites Drupal maintenant, quelle est une bonne alternative pour réparer facilement ce trou?

Un correctif est disponible si vous ne pouvez pas mettre à jour le noyau immédiatement. De Drupal.org:

Si vous exécutez 7.x, effectuez une mise à niveau vers Drupal 7.58 . (Si vous ne pouvez pas mettre à jour immédiatement, vous pouvez essayer d'appliquer ce correctif pour corriger la vulnérabilité jusqu'à ce que vous puissiez mettre à jour complètement.)

Si vous exécutez 8.5.x, passez à Drupal 8.5.1 . (Si vous ne pouvez pas mettre à jour immédiatement, vous pouvez essayer d'appliquer ce correctif pour corriger la vulnérabilité jusqu'à ce que vous puissiez mettre à jour complètement.)

Pour en savoir plus, voici une FAQ sur l'exploit


2
Je voudrais également ajouter un lien vers cette annonce de service public du 21 mars. Des exploits pourraient être attendus dans les heures ou les jours. Alors mettez à jour dès que possible.
Neograph734

Voici le guide Drupal pour les sites piratés, au cas où quelqu'un en aurait besoin: drupal.org/drupal-security-team/…
Christia

1
Je dirais que la meilleure solution consiste à appliquer le correctif immédiatement, puis à mettre à jour vos sites vers la dernière version. La raison en est que, à moins que votre site ne soit toujours extrêmement à jour, une série de mises à jour de sécurité du module va prendre plus de temps pour fournir la bonne quantité de tests et nécessite également un déploiement plus complexe. Donc, obtenir la solution la plus importante le plus rapidement possible devrait être l'approche privilégiée.
rooby

1

Comment patcher Drupal 7.x à la main contre le noyau Drupal - Très critique - Exécution de code à distance - SA-CORE-2018-00

Si vous utilisez Drupal 7.x et que vous ne pouvez pas mettre à jour votre site en ligne vers la version 7.58, que vous n'êtes pas familier avec l'application de correctifs ou que vous utilisez une version Drupal pour laquelle le correctif échoue, procédez comme suit:

1> Téléchargez et extrayez Drupal 7.58.

2> Copiez le fichier /includes/request-sanitizer.inc de la distribution 7.58 dans le répertoire / includes de votre site Web (le plus simple via FTP ou le gestionnaire de fichiers de votre panneau de contrôle d'hébergement).

3> Modifiez la version de /includes/bootstrap.inc sur votre site Web en direct (sauvegardez d'abord!). Recherchez la fonction _drupal_bootstrap_configuration (). Ajoutez les 3 lignes suivantes après l'instruction drupal_settings_initialize (); :

// Sanitize unsafe keys from the request.
require_once DRUPAL_ROOT . '/includes/request-sanitizer.inc';
DrupalRequestSanitizer::sanitize();

Sauvegarder.

Se détendre.


0

Voici un processus 1-2-3 simple ici:

  1. Copiez le code dans le presse-papiers d'ici https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5 ou comme indiqué ci-dessous.
  2. créez un fichier vierge appelé fichier 2018march.patch dans le dossier racine de votre répertoire drupal.
  3. Collez le code dans le fichier
  4. Exécutez la commande dans le terminal: patch -p1 <2018march.patch

Si vous n'avez pas d'accès SSH ou terminal. Vous devrez le faire manuellement à la main en utilisant la solution @elb de l'utilisateur.

diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc
index 655db6d..880557e 100644
--- a/includes/bootstrap.inc
+++ b/includes/bootstrap.inc
@@ -2632,6 +2632,10 @@ function _drupal_bootstrap_configuration() {
   timer_start('page');
   // Initialize the configuration, including variables from settings.php.
   drupal_settings_initialize();
+
+  // Sanitize unsafe keys from the request.
+  require_once DRUPAL_ROOT . '/includes/request-sanitizer.inc';
+  DrupalRequestSanitizer::sanitize();
 }

 /**
diff --git a/includes/request-sanitizer.inc b/includes/request-sanitizer.inc
new file mode 100644
index 0000000..1daa6b5
--- /dev/null
+++ b/includes/request-sanitizer.inc
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * @file
+ * Contains code for sanitizing user input from the request.
+ */
+
+/**
+ * Sanitizes user input from the request.
+ */
+class DrupalRequestSanitizer {
+
+  /**
+   * Tracks whether the request was already sanitized.
+   */
+  protected static $sanitized = FALSE;
+
+  /**
+   * Modifies the request to strip dangerous keys from user input.
+   */
+  public static function sanitize() {
+    if (!self::$sanitized) {
+      $whitelist = variable_get('sanitize_input_whitelist', array());
+      $log_sanitized_keys = variable_get('sanitize_input_logging', FALSE);
+
+      // Process query string parameters.
+      $get_sanitized_keys = array();
+      $_GET = self::stripDangerousValues($_GET, $whitelist, $get_sanitized_keys);
+      if ($log_sanitized_keys && $get_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from query string parameters (GET): @keys', array('@keys' => implode(', ', $get_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      // Process request body parameters.
+      $post_sanitized_keys = array();
+      $_POST = self::stripDangerousValues($_POST, $whitelist, $post_sanitized_keys);
+      if ($log_sanitized_keys && $post_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from request body parameters (POST): @keys', array('@keys' => implode(', ', $post_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      // Process cookie parameters.
+      $cookie_sanitized_keys = array();
+      $_COOKIE = self::stripDangerousValues($_COOKIE, $whitelist, $cookie_sanitized_keys);
+      if ($log_sanitized_keys && $cookie_sanitized_keys) {
+        _drupal_trigger_error_with_delayed_logging(format_string('Potentially unsafe keys removed from cookie parameters (COOKIE): @keys', array('@keys' => implode(', ', $cookie_sanitized_keys))), E_USER_NOTICE);
+      }
+
+      $request_sanitized_keys = array();
+      $_REQUEST = self::stripDangerousValues($_REQUEST, $whitelist, $request_sanitized_keys);
+
+      self::$sanitized = TRUE;
+    }
+  }
+
+  /**
+   * Strips dangerous keys from the provided input.
+   *
+   * @param mixed $input
+   *   The input to sanitize.
+   * @param string[] $whitelist
+   *   An array of keys to whitelist as safe.
+   * @param string[] $sanitized_keys
+   *   An array of keys that have been removed.
+   *
+   * @return mixed
+   *   The sanitized input.
+   */
+  protected static function stripDangerousValues($input, array $whitelist, array &$sanitized_keys) {
+    if (is_array($input)) {
+      foreach ($input as $key => $value) {
+        if ($key !== '' && $key[0] === '#' && !in_array($key, $whitelist, TRUE)) {
+          unset($input[$key]);
+          $sanitized_keys[] = $key;
+        }
+        else {
+          $input[$key] = self::stripDangerousValues($input[$key], $whitelist, $sanitized_keys);
+        }
+      }
+    }
+    return $input;
+  }
+
+}

Vous devez installer git pour ce faire.
user2924019
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.