התקפות פעילות על פירצת SQL Injection קריטית ב-Drupal Core (CVE-2026-9082)

פתיחה

דמיינו שאתם מנהלים חנות ספרים דיגיטלית, וכל המידע על הלקוחות, ההזמנות והמוצרים שלכם שמור בבסיס נתונים מרכזי. יום אחד, תוקף מתוחכם מצליח להכניס “הוראות סודיות” לתוך הטופס הפשוט של חיפוש ספרים באתר שלכם. ההוראות האלה לא רק מחפשות ספרים, אלא גם מושכות מידע רגיש מבסיס הנתונים או אפילו משנות אותו. זהו תרחיש של SQL Injection – אחד מהווקטורים הוותיקים והמסוכנים ביותר בעולם אבטחת האינטרנט, וכפי שה-CISA (סוכנות הסייבר האמריקאית) מזהירה, פירצה קריטית כזו נמצאת כעת בניצול פעיל במערכת ניהול התוכן הפופולרית Drupal Core (CVE-2026-9082).

רקע

Drupal היא אחת ממערכות ניהול התוכן (Content Management Systems – CMS) המובילות בעולם, המשמשת מיליוני אתרים, החל מבלוגים אישיים ועד לאתרים ממשלתיים ותאגידיים גדולים. הפופולריות שלה הופכת אותה למטרה אטרקטיבית עבור תוקפים, ופגיעות קריטיות ב-Drupal Core – ליבת המערכת – עלולות להיות בעלות השלכות מרחיקות לכת.

האזהרה האחרונה של CISA מתייחסת לפירצת SQL Injection (הזרקת SQL) ב-Drupal Core, המזוהה כ-CVE-2026-9082. פירצה זו, המסווגת תחת CWE-89 (שמתייחסת ל-Injection כללי), נמצאת כעת בניצול פעיל (“actively exploited in real-world attacks”). משמעות הדבר היא שתוקפים כבר מנצלים את הפירצה הזו כדי לפגוע באתרים.

עומק טכני

פירצת SQL Injection מתרחשת כאשר יישום אינטרנט בונה שאילתות SQL באופן דינמי באמצעות קלט משתמש בלתי מהימן או לא מאומת. במקום להתייחס לקלט כאל נתונים בלבד, השרת מפרש חלק ממנו כחלק מהפקודה עצמה, ובכך מאפשר לתוקף לשנות את לוגיקת השאילתה.

במקרה של CVE-2026-9082 ב-Drupal Core, הפירצה נמצאת ב-Database Abstraction API של Drupal. זהו הממשק ש-Drupal משתמשת בו כדי לתקשר עם בסיסי נתונים שונים (MySQL, PostgreSQL וכו’). כפי שהשם מרמז, ה-API אמור לבודד את מפתחי Drupal מהפרטים הספציפיים של בסיס הנתונים, אך פירצה בו משמעותה שכל מודול או רכיב המשתמש ב-API הפגיע יכול להיות חשוף.

כיצד זה עובד?

נניח של-Drupal יש פונקציה כלשהי שמקבלת פרמטר מהמשתמש, למשל itemId, ומשלבת אותו ישירות לתוך שאילתת SQL ללא טיפול נכון (Escaping או Parameterization).

שאילתה תמימה (כפי שהמפתח התכוון):

SELECT title, description FROM items WHERE id = [itemId_from_user_input];

קלט תוקף (מטען זדוני): במקום להזין מספר פשוט כמו 123, תוקף מזין מחרוזת מיוחדת כמו: 123 UNION SELECT username, password FROM users --

השאילתה כפי שהיא מבוצעת בפועל בבסיס הנתונים:

SELECT title, description FROM items WHERE id = 123 UNION SELECT username, password FROM users --;

התוצאה היא שהשרת יחזיר לא רק את פרטי הפריט (item) שהתוקף ביקש, אלא גם את שמות המשתמשים והסיסמאות מטבלת המשתמשים (users table)! ה--- בסוף נועד להפוך את שאר השאילתה המקורית (שלאחר הקלט) להערה, ובכך למנוע שגיאות תחביר. זהו רק סוג אחד של SQL Injection (UNION-based). קיימים סוגים נוספים כמו Error-based, Boolean-based Blind, Time-based Blind ועוד, שמאפשרים לתוקפים למשוך מידע, לשנות נתונים, או במקרים מסוימים אפילו להריץ פקודות מערכת על השרת (SQL Injection to RCE) אם בסיס הנתונים מוגדר בצורה לא בטוחה (לדוגמה, עם הרשאות גבוהות מדי או פונקציות מערכת זמינות).

דוגמאות / קוד

כדי להדגים את הקונספט, נניח שהייתה נקודת קצה (endpoint) פגיעה ב-Drupal שמקבלת פרמטר id. בקשה HTTP רגילה:

GET /node/view?id=123 HTTP/1.1
Host: example.com

תגובה: פרטי צומת (node) מספר 123.

בקשה זדונית לניצול SQL Injection:

GET /node/view?id=123+UNION+SELECT+1,group_concat(name,0x3a,pass)+FROM+users--+- HTTP/1.1
Host: example.com

כאן, group_concat(name,0x3a,pass) ישלב את שמות המשתמשים והסיסמאות, ו-0x3a הוא ייצוג הקסדצימלי של תו נקודתיים (:). ה---+- בסוף הופך את שארית השאילתה להערה. התוקף יראה את שמות המשתמשים והסיסמאות בתגובה של דף ה-HTML.

הגנה באמצעות Prepared Statements

פתרון נפוץ לפירצות SQL Injection הוא שימוש ב-Prepared Statements או Parameterized Queries. במקום להכניס את קלט המשתמש ישירות לתוך מחרוזת ה-SQL, אנו מגדירים “מצייני מיקום” (placeholders) בשאילתה, ומעבירים את קלט המשתמש כפרמטרים נפרדים. זה מבטיח שמערכת בסיס הנתונים תטפל בקלט כנתונים, ולא כחלק מהפקודה.

דוגמה לקוד ב-PHP (קונספטואלי) שמטפל נכון:

<?php
// Using PDO for prepared statements
$stmt = $pdo->prepare("SELECT title, description FROM items WHERE id = :item_id");
$stmt->bindParam(':item_id', $_GET['id']);
$stmt->execute();
$result = $stmt->fetch();
// ... process result
?>

קוד כזה, בניגוד לחיבור מחרוזות ישיר, מונע ממתקפות SQL Injection להצליח.

המלצות ומסקנות

פירצת CVE-2026-9082 ב-Drupal Core היא קריטית ודורשת פעולה מיידית:

  1. עדכון מיידי: מנהלי אתרי Drupal חייבים לעדכן את המערכת לגרסה המתוקנת בהקדם האפשרי. עקבו אחר הודעות האבטחה הרשמיות של Drupal והתקינו את כל התיקונים הקריטיים. ודאו שהעדכון כולל תיקונים ל-Database Abstraction API.
  2. סריקות אבטחה: בצעו סריקות אבטחה (Vulnerability Scans) לאתרים שלכם כדי לזהות נקודות תורפה, כולל כאלה שקשורות ל-SQL Injection.
  3. WAF (Web Application Firewall): הטמיעו או ודאו תצורה נכונה של WAF. WAF יכול לסייע בחסימת ניסיונות SQL Injection על ידי זיהוי דפוסים זדוניים בתעבורת HTTP. זהו קו הגנה נוסף, אך אינו תחליף לתיקון הפירצה בקוד המקור.
  4. ניטור יומנים (Log Monitoring): נטרו יומני שרתים (Web Server Logs, Database Logs) אחר דפוסים חשודים המעידים על ניסיונות SQL Injection, כגון מחרוזות מיוחדות בפרמטרים של URL או POST.
  5. עקרונות פיתוח מאובטח: למפתחים, זוהי תזכורת לחשיבות השימוש ב-Prepared Statements / Parameterized Queries עבור כל אינטראקציה עם בסיס הנתונים המשתמשת בקלט משתמש. לעולם אל תבנו שאילתות SQL על ידי שרשור מחרוזות ישיר עם קלט בלתי מהימן.
  6. בדיקות חדירה (Penetration Testing): בצעו בדיקות חדירה קבועות לאתרי האינטרנט שלכם, כולל בדיקות לזיהוי SQL Injection.

SQL Injection היא פירצה עתיקת יומין אך עדיין רלוונטית ומסוכנת ביותר. ניצול פעיל של CVE-2026-9082 ב-Drupal Core מדגיש את החשיבות של עירנות מתמדת, עדכונים מהירים ושיטות פיתוח מאובטחות.

משאבים

  • CISA Advisory: חפשו את ההתראה הרשמית של CISA בנוגע ל-CVE-2026-9082.
  • Drupal Security Advisories: עקבו אחר עדכוני האבטחה של Drupal באתר הרשמי שלהם.
  • OWASP Top 10 - Injection (A03:2021): למידע נוסף על פירצות Injection באופן כללי.

מקור: https://cybersecuritynews.com/drupal-core-sql-injection-vulnerability-exploited/

תגובות