Ana içeriğe geç

A03:2021 – Injection icon

Faktörler

CWEs Eşleştirildi Maks Görülme Oranı Ort. Görülme Oranı Ort. Ağırlıklı Exploit Ort. Ağırlıklı Impact Maks Coverage Ort. Coverage Toplam Olay Toplam CVE
33 19.09% 3.37% 7.25 7.15 94.04% 47.90% 274,228 32,078

Genel Bakış

Injection üçüncü sıraya geriledi. Uygulamaların %94’ü bir tür injection için test edildi; maksimum görülme oranı %19, ortalama görülme oranı %3 ve 274k olay kaydedildi. Dikkate değer Common Weakness Enumeration (CWE) örnekleri arasında CWE-79: Cross-site Scripting, CWE-89: SQL Injection ve CWE-73: External Control of File Name or Path bulunur.

Açıklama

Bir uygulama şu durumlarda saldırıya açık hale gelir:

  • Kullanıcıdan gelen veri uygulama tarafından validate, filter veya sanitize edilmiyorsa.

  • Dynamic query’ler veya context-aware escaping olmadan non-parameterized çağrılar doğrudan interpreter’da kullanılıyorsa.

  • Hostile data, ek hassas kayıtları çıkarmak için object-relational mapping (ORM) search parametrelerinde kullanılıyorsa.

  • Hostile data doğrudan kullanılıyor veya concat ediliyorsa. SQL ya da komut, dynamic query, command veya stored procedure’lerde hem yapı hem de malicious data’yı içeriyorsa.

En yaygın injection türleri arasında SQL, NoSQL, OS command, ORM, LDAP ve Expression Language (EL) ya da Object Graph Navigation Library (OGNL) injection yer alır. Kavram tüm interpreter’larda aynıdır. Source code review, uygulamaların injection’a açık olup olmadığını tespit etmenin en iyi yöntemidir. Tüm parametrelerin, header’ların, URL, cookie’lerin, JSON, SOAP ve XML data input’larının otomatik test edilmesi şiddetle tavsiye edilir. Kuruluşlar, production’a dağıtımdan önce eklenen injection kusurlarını belirlemek için CI/CD pipeline’ına static (SAST), dynamic (DAST) ve interactive (IAST) application security testing tool’larını dahil edebilir.

Nasıl Önlenir

Injection’ı önlemek, veriyi komut ve query’lerden ayrı tutmayı gerektirir:

  • Tercih edilen seçenek, interpreter kullanımını tamamen önleyen, parameterized arayüz sağlayan veya ORM’lere migrate eden güvenli bir API kullanmaktır.
    Not: Parameterized olsalar bile stored procedure’ler, eğer PL/SQL veya T-SQL query ve data’yı concat ediyorsa ya da hostile data’yı EXECUTE IMMEDIATE veya exec() ile çalıştırıyorsa, yine SQL injection’a yol açabilir.

  • Pozitif (allow-list tabanlı) server-side input validation kullanın. Bu, tek başına tam bir savunma değildir; birçok uygulama text area gibi özel karakterler veya mobil uygulamalar için API’ler gerektirir.

  • Kalan dynamic query’ler için, ilgili interpreter’ın özel escape syntax’ını kullanarak special character’ları escape edin.
    Not: Tablo adları, kolon adları gibi SQL yapıları escape edilemez; bu nedenle user-supplied yapı adları tehlikelidir. Bu, raporlama yazılımlarında yaygın bir sorundur.

Örnek Saldırı Senaryoları

Senaryo #1: Bir uygulama, güvensiz veriyi aşağıdaki zafiyetli SQL çağrısının oluşturulmasında kullanıyor:

String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";

Senaryo #2: Benzer şekilde, bir uygulamanın framework’lere körü körüne güvenmesi, sorguların yine zafiyetli olmasına yol açabilir (ör. Hibernate Query Language - HQL):

Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");

Her iki durumda da saldırgan, tarayıcısında ‘id’ parametre değerini şu şekilde değiştirir: ' UNION SELECT SLEEP(10);--. Örneğin:

http://example.com/app/accountView?id=' UNION SELECT SLEEP(10);--

Bu, her iki sorgunun da anlamını değiştirerek accounts tablosundaki tüm kayıtların döndürülmesine neden olur. Daha tehlikeli saldırılar veriyi değiştirebilir veya silebilir, hatta stored procedure’leri bile tetikleyebilir.

Referanslar

Eşleştirilen CWE Listesi

CWE-20 Improper Input Validation

CWE-74 Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection')

CWE-75 Failure to Sanitize Special Elements into a Different Plane (Special Element Injection)

CWE-77 Improper Neutralization of Special Elements used in a Command ('Command Injection')

CWE-78 Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')

CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

CWE-80 Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)

CWE-83 Improper Neutralization of Script in Attributes in a Web Page

CWE-87 Improper Neutralization of Alternate XSS Syntax

CWE-88 Improper Neutralization of Argument Delimiters in a Command ('Argument Injection')

CWE-89 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

CWE-90 Improper Neutralization of Special Elements used in an LDAP Query ('LDAP Injection')

CWE-91 XML Injection (aka Blind XPath Injection)

CWE-93 Improper Neutralization of CRLF Sequences ('CRLF Injection')

CWE-94 Improper Control of Generation of Code ('Code Injection')

CWE-95 Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')

CWE-96 Improper Neutralization of Directives in Statically Saved Code ('Static Code Injection')

CWE-97 Improper Neutralization of Server-Side Includes (SSI) Within a Web Page

CWE-98 Improper Control of Filename for Include/Require Statement in PHP Program ('PHP Remote File Inclusion')

CWE-99 Improper Control of Resource Identifiers ('Resource Injection')

CWE-100 Deprecated: Was catch-all for input validation issues

CWE-113 Improper Neutralization of CRLF Sequences in HTTP Headers ('HTTP Response Splitting')

CWE-116 Improper Encoding or Escaping of Output

CWE-138 Improper Neutralization of Special Elements

CWE-184 Incomplete List of Disallowed Inputs

CWE-470 Use of Externally-Controlled Input to Select Classes or Code ('Unsafe Reflection')

CWE-471 Modification of Assumed-Immutable Data (MAID)

CWE-564 SQL Injection: Hibernate

CWE-610 Externally Controlled Reference to a Resource in Another Sphere

CWE-643 Improper Neutralization of Data within XPath Expressions ('XPath Injection')

CWE-644 Improper Neutralization of HTTP Headers for Scripting Syntax

CWE-652 Improper Neutralization of Data within XQuery Expressions ('XQuery Injection')

CWE-917 Improper Neutralization of Special Elements used in an Expression Language Statement ('Expression Language Injection')