CWE/OWASP

Dozent:

Prof. Dr. Michael Eichberg

Kontakt:

michael.eichberg@dhbw-mannheim.de

Version:
2024-05-09
Folien:

https://delors.github.io/sec-cwe-owasp/folien.rst.html

https://delors.github.io/sec-cwe-owasp/folien.rst.html.pdf

Fehler auf Folien melden:

https://github.com/Delors/delors.github.io/issues

Relevante Schwachstellen (CWEs)

CWE-787: Out-of-bounds Write (Memory Corruption)

CWE-787: Out-of-bounds Write

Beschreibung:

Es werden Daten hinter oder vor den Bereich des Puffers geschrieben.

Programmiersprachen:

C /C++

Wahrscheinlichkeit des Missbrauchs:

Hoch

Technische Auswirkungen:

Speichermodifikation; DoS: Crash, Beendigung oder Neustart; Ausführen von nicht autorisiertem Code oder Befehlen

CWE-787: Out-of-bounds Write - Beispiel 1

int id_sequence[3];

/* Populate the id array. */

id_sequence[0] = 123;
id_sequence[1] = 234;
id_sequence[2] = 345;
id_sequence[3] = 456;

CWE-787: Out-of-bounds Write - Beispiel 2

int returnChunkSize(void *) {

    /* if chunk info is valid, return the size of usable memory,

    * else, return -1 to indicate an error

    */
    ...
}

int main() {
    ...
    memcpy(destBuf, srcBuf, (returnChunkSize(destBuf)-1));
    ...
}
MTAwMDAw:cFRLrWLOitBZGUxKM/XPGxGef9QWxkFFWYYwFsSIjc0=:u6eV/6P9kHGDhTJ5:EPeoTWPQXU9MKJIi3Q06MTb4qWhqBKeTq1mll+oX8BBjBLYtyrP0ObNdLt+eTcyjXH2EWwUvwFosKgyJGIWvPwnpJ3170J7qU1yktvS/dARanbMwdS1fvsmnmykUnoCm4+k3RJg0OQIdy+fIaH3aTaDr3sfmEZch9ZFNxITbZlNQrcH1eTlUEYag/7GufKgXFD40UTHN+jv2GMUNbBOMMPDRqwC5V1Uh9a4d1ENJbFO5Vn3Xnwr2Fl3MCgAQKTKzdmH3JoSZgdP4Ye57yqikVNyp3g==

CWE-787: Out-of-bounds Write - Beispiel 3

void host_lookup(char *user_supplied_addr){
    struct hostent *hp;
    in_addr_t *addr;
    char hostname[64];
    in_addr_t inet_addr(const char *cp); // function prototype

    /* routine that ensures user_supplied_addr is in the right format for
    conversion */

    validate_addr_form(user_supplied_addr);
    addr = inet_addr(user_supplied_addr);
    hp = gethostbyaddr( addr, sizeof(struct in_addr), AF_INET);
    strcpy(hostname, hp->h_name);
}
MTAwMDAw:C6FvCuQBKEcS+ei5MNPLQ32i37AkYyJFaGjCq89HbwU=:YggyRfP6c5yQK9Wy:tsszvFSYJC8zAJjrJKsGl2aY9ffkF+KBJ7AOqZOJf8pWjjiO9j19QpgOuXt8bkiYa84CSiMOU7uMl3KZLJHDScJz5MDpCuFnmvVhLsUUFMLaEb5DDbtecbYlsKxtheJpNfjqI4iMfgGtsQFJJLlIYKc1KuBChw/XrfcQmR65SwFGuht+ug+1UM77vnZhGBWLUs0t8zLB1+xjUm3WoQUbILOy6JSt5O15GoU8vnpKQ6P1ZvoObFp1dW7OGIjlqN0j2UYTK1DwgesM6aYFQLK+83T7xhivjBK1ZPRWHwQjW2BesDvFrnholwdC6X15yFV6L6AaSfHhY6SQuEl47HqHF9/dSzQTbxHLkkhtm7XHgKmThipdfvVvnZ/m6CM85g==

CWE-787: Out-of-bounds Write - Beispiel 4

char * copy_input(char *user_supplied_string){
int i, dst_index;
char *dst_buf = (char*)malloc(4*sizeof(char) * MAX_SIZE);
if ( MAX_SIZE <= strlen(user_supplied_string) ) die("string too long");
dst_index = 0;
for ( i = 0; i < strlen(user_supplied_string); i++ ){
    if( '&' == user_supplied_string[i] ){
    dst_buf[dst_index++] = '&';
    dst_buf[dst_index++] = 'a';
    dst_buf[dst_index++] = 'm';
    dst_buf[dst_index++] = 'p';
    dst_buf[dst_index++] = ';';
    }
    else if ( '<' == user_supplied_string[i] ){ /* encode to &lt; */ }
    else dst_buf[dst_index++] = user_supplied_string[i];
}
return dst_buf;
}
MTAwMDAw:stBSaZtbI5QomOaVuk6snMiMhtBShUPwM5klUIrsJww=:RGQJvXwNJBemk1GO:+KfG7F/sEJ5KNk3LR997ZCn9V8z6d059HCTCec/f/66T1qSXzwBdQ/ORAcoJfBone+jCQkoVYRsTgPCF2WOwK2KAXOLz/HJIa7Q1c7+JaEkBGiSjaqpmDndLpfaBJc/KW8rHSNEJkEPhJ7YqQfDLxfufrAXQMiImFnpYvhtUXPub1Zyzniw5qrDH92loZOJrdcUwYrvs8I5bGl4MsRxzJRzhtxvOdQnjbePJF7VjjvaOvE32/ahajsibj+7lrrcwQ6Xl7LGLqU9ZmlMqGqenngTDBKoZN6McuToCN5Fc4gK4QOzo3AOyxhnn/lVBrIah+Doct6qJVYcm2QkvIvMCc5v65kFPCO89sgXWbkNJAihPA6GbqJtlYAs=

CWE-787: Out-of-bounds Write - Beispiel 5

char* trimTrailingWhitespace(char *strMessage, int length) {
  char *retMessage;
  char message[length+1];                    // copy input string to a
  int index;                                 //      temporary string
  for (index = 0; index < length; index++) { //
    message[index] = strMessage[index];      //
  }                                          //
  message[index] = '\0';                     //

  int len = index-1;                         // trim trailing whitespace
  while (isspace(message[len])) {            //
    message[len] = '\0';                     //
    len--;                                   //
  }                                          //

  retMessage = message;
  return retMessage;                         // return trimmed string
}


.. solution::
    :pwd: Whitespace

    Das Problem ist, dass Zeichenketten, die nur aus Whitespace bestehen, nicht korrekt behandelt werden. In diesem Fall kommt es zu einem Buffer-Underflow (d.h. es wird auf den Speicherbereich vor dem Puffer zugegriffen).
isspace:

If an argument (character) passed to the isspace() function is a white-space character, it returns non-zero integer. If not, it returns 0.

CWE-787: Out-of-bounds Write - Beispiel 6

int i;
unsigned int numWidgets;
Widget **WidgetList;

numWidgets = GetUntrustedSizeValue();
if ((numWidgets == 0) || (numWidgets > MAX_NUM_WIDGETS)) {
ExitError("Incorrect number of widgets requested!");
}
WidgetList = (Widget **)malloc(numWidgets * sizeof(Widget *));
printf("WidgetList ptr=%p\n", WidgetList);
for(i=0; i<numWidgets; i++) {
WidgetList[i] = InitializeWidget();
}
WidgetList[numWidgets] = NULL;
showWidgets(WidgetList);
MTAwMDAw:V2PBUt7/LX/sLO5DmLZN+6/w+LfH4cUnacl5KWNEyow=:mRUfnM1de3RvE28A:LxUuLr52H8gmNEjRrkNJDcjv5Lt+FAOOjgrRrl9k6/4ZZF1l3HTMSY6vLE0wZtZsP9G2mHrNdoo+AnhESYCMMkFmOy+lKWaC4+gACefcbB+bgbuQjhZ708N/l11W0FZvOyBJzH3xbXoaSyDpdA6MheVpeOsq6l2ndOY5D/bVcR+tcdOukBZ2fmIALfCEIFFQkjh/EB7kqCM1W13K2F+2WsVIdheqpTa0xZZNcyNXyfpKDstl5k+GLqdq0dskMgOJrYgY1H3rU/4tOyvh9/z3i/AsGOYddvZV4DwjnISzmqWrD3ueEtZyxSz7JtVqstCv8HZj4pAcyQafoTycFAu/Qtk=

CWE-787: Out-of-bounds Write - Mögliche Abhilfemaßnahmen

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

CWE-79: Improper Neutralization of Input During Web Page Generation

Kurzbeschreibung:

Nutzereingaben werden nicht oder falsch bereinigt, bevor sie in die Ausgabe eingefügt werden, die als Webseite für andere Benutzer verwendet wird.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Technische Auswirkungen:

Speichermodifikation; DoS: Crash, Beendigung oder Neustart; Ausführen von nicht autorisiertem Code oder Befehlen

Betrifft:

Zugriffskontrolle, Vertraulichkeit

Typen:

Stored XSS (Typ 2), Reflected XSS (Typ 1), DOM-based XSS (Typ 0)

Durch eine XSS Lücke werden häufig Informationen abgegriffen (z. B. Session Cookies). Allerdings ist es ggf. auch möglich, dass der Angreifer die Session des Nutzers übernimmt und sich als dieser ausgibt.

Stored XSS (Typ 2)

Stored XSS

Reflected XSS (Typ 1)

Reflected XSS

Reflected XSS ist häufig schwerer auszunutzen, da der Angreifer den Nutzer dazu bringen muss, einen Link zu klicken, der den Angriffsvektor enthält. Bei Stored XSS ist dies nicht notwendig, da der Angriffsvektor bereits auf dem Server gespeichert ist.

Dom-based XSS (Typ 0)

Dom-based XSS

Dom-based XSS ist am schwersten Auszunutzen, da der Angreifer den Nutzer dazu bringen muss den Schadcode in die Informationen einzubringen, die von dem Script verarbeitet werden (z. B. durch das Eingeben in ein Formular).

CWE-79: XSS - Beispiel 1 - XSS Typ 1 (Php)

# Rückgabe einer Willkommensnachricht basierend auf dem
# HTTP Get username Parameter
$username = $_GET['username'];
echo '<div class="header"> Welcome, ' . $username . '</div>';
MTAwMDAw:nyn6n8eb6s1O0mJR3vxbfTUYJNqJwZNf9S9Y7hNXZfk=:z5QiASY9AzeWUlcU:jy38b9ZyaHtpH2Y5UR4v8E2FK3zf9pSNcWBXTbQyr+Y529Gsl92X6YnVYNyOuHQMyKft8EMn6Z4XtPR6y2azOlwl1NHDieP3iuzPRL3i57Ftru1kroiBwpC9TMcwCL3sJ4a0x6JDPOsg0ti9QwQltYWmaX8rJFTbVL1ZCMId1kQ8d4kEGsR5e6jbOiE05X6/N7qRdHeFQ5mcAQBpSa8d3H6UxJ87QdU9s57KRMS8ZcpghUs1azcl8px2EzingWXnuN8FPdCUTW+Eh9KxXCxwyDhxrt8UAoOjP2ATko/vbZSJSmlh3FedQQ4RBxJdg5o5QLqChx1+Xv+DWIWft3mjHkBvEDi4Snrf1S5qd50jch+vc6h1ZNAHyHEEdPua6esIWzgLiSOPwCzEDGsubvSDzuZaURc4aRpyxB1hvA294QGt6lA6Fb6MyhT9eI9T1oQZyOX3f2a94zXPLm8mgbprNjgSXBjqzB8R2WfUtF89jk+1NuQQt45bqCYtrzU9DTE89XEJtrtqAuyCvKV4dy2a0ZF+3Wqc9yGi4lSVJZrfysUp9ack/iaEFs/8SW8zr/UdRIoLYE0O2FUMjTqZndE7P7T+wKmt8Ejk5FD1cLUnScJWeo9Tl1zkMJKms2oxwOhzjwhGmLpwrqQyKaMbsyjbE0aIHvcwujy83EPXJRzGb9mJLAbSelh4DKW5yyZ2JNo+TMb9KQ1lhE3nJJUKkTwl85R4Ok1GaYvfNg4cX/nrYsEQg3ojTCVM/ZdbCViEGCE0gCTmMUE8eTUpIcQ1WgSH8u2RB2GJ

CWE-79: XSS - Beispiel 2 - XSS Typ 2 (JSP)

<%  String eid = request.getParameter("eid");
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from emp where id="+eid);
    if (rs != null) {
    rs.next();
    String name = rs.getString("name");
    }
%>

Employee Name: <%= name %>
MTAwMDAw:ov2mK/AIYYiWN+71GZdP3mrUcIVlJUScYKm6N9SgbjI=:uUkcJ2bW23GRvHep:CrmVDVcKo5fCskov/sAQVvp98NZlrWFcgqRR1827RWYBT2mNmIgiGjLRlzwZ9SqaRgSaF2DRCeg9XSeEDIbD5TLzpUAUpvgRu9TzPFJVJRDEW4bmypfESNY08F3XwGBDavyHxwcZVnyA8bIr/SWEZGa6c4xEs2uTnQedXzWpktSkZwm6VMa80fY9a1Ni9zaBNNKoTk7iLu815rYXdi5rZMPa8I7UcTwqEc/kA+YwTfVRAPgZ3TWxcPOJ3GC/LB9B2kmyfIW8IvA8Qzhtm25wt+A0iMfmqk7iO6Ht7awdZeGhuoi+4f1hKrMs+VxSsh6VCcTJ3QPkLAw/AGqeoS0VAzGrbGGQVDvDxpSXZVKDy33IcxZ5gOXaYfmAwiYPzGL0PB598F9HG19Fnsk7dWYJQnLti3vMfKRhpAbpfaOLePnx1IYexUaFbkYA1opizfYqxHrGcEPrXxVLQbkOcCWtxbCNO2blb08Nl30RiTcvqA8n5AzP0JAXEvky+XEpTrD3zDYw4uQPY5rqzFI=

CWE-79: XSS - Beispiel 3 - XSS Typ 2 (PHP)

$username = mysql_real_escape_string($username);
$fullName = mysql_real_escape_string($fullName);
$query = sprintf('Insert Into users (uname,pwd,fname) Values ("%s","%s","%s")',
                $username,
                crypt($password),
                $fullName) ;
mysql_query($query);
...
MTAwMDAw:IeLSBPs9mWzGITlUEbJtmyVXXopr76srMsbo1YySm1k=:Av14rVCzu5P6IrTv:ZJPW35iMHRN5ZAk32PDcVSGXN+sfBrrCvJD79itE3cvnbPJdqr+QJoEedUodvFW8ldAJ6yD8OB8tGJh4WAYjzTkgCzikX4TIfoYC9WbZZfVmPSmKR82+qUYSpqDW9MKplgD9Cmf7gJTZKHge/vSwaczEojln6qlK/VbZlYdvXvJtpdWjmNc0M6+diC5z1sxrJ/YwjODHD1vIyg2wbll3OBaMu5MSWdgcsHDA3CrB7/rPbtMPkHatP+Bvzu1vAzgdlrhviddwDBeix09jbA==

CWE-79: Improper Neutralization of Input During Web Page Generation - Abhilfemaßnahmen und Erkennung

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

CWE-89: Improper Neutralization of Special Elements used in an SQL Command

Kurzbeschreibung:

Ein SQL-Befehl wird ganz oder teilweise unter Verwendung extern beeinflusster Eingaben von einer vorgelagerten Komponente erzeugt, bereinigt aber spezielle Elemente nicht oder falsch, die den beabsichtigten SQL-Befehl verändern könnten, wenn er an eine nachgelagerte Komponente gesendet wird.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Technologie:

Datenbanken

Betrifft:

Zugriffskontrolle, Vertraulichkeit, Integrität

CWE-89: SQL Injection - Beispiel 1 (MS SQl)

SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='$user_input' ORDER BY PRICE
MTAwMDAw:XCc1S7qLgmbgEoWOvxXUDSwDbOQL8lhJHhQojhLGGaE=:xWiXHXyVSgjQ0RWL:e/r22gCbGwnfAcYLqR3VCIFBH1pWyXjUOy9yKkb/dpCJ8Dnyi5VWz2knCMJUO/Z7sd4p+uzk2SLSONYLWsAmyAQTqelIwLmrsr7VLFE/XJ45+pUYcynmJHtfKB9aT6/rwohXtbp9heGHjfFv9JR7APaw0dT0FXIsQmfu+mc8a/TuJFBMuEqp7e1zUglPxUWV1j24F6nYKg==

CWE-89: SQL Injection - Beispiel 2 (PHP)

$id = $_COOKIE["mid"];
mysql_query("SELECT MessageID, Subject FROM messages WHERE MessageID = '$id'");
MTAwMDAw:h7tcyaOwd3OSqi7O3HVVNvflF/5mPkbuYJB403FP4Bc=:XPXusKURWsMfqmhk:Gbq0EPDTz57cddSAwkLYAeqTAz9oRbEwwHeVWhhhaih4rQYShVbr99FRe2zik3VXXKVmp/Xrbb068h7n/gGet9l/HyuZlaLD+vNPgjLup0mMzOBh+NItXjZttc51jZxXH5SjivIhG7H+V6tmFLPlr51jnZ5kuLFzA8qKBTJRghRRk6SYhiE48JjVDn0rUGmJiuUMZiFZyE3HHd/V1aFvcimSpnN82C/NRatUlZgIZF2FP452ZNKUbmmf8guyvf5MMa5uhdDJXtk/kr2bCKqyIk7L7W14nOjPPCAwz/orsOP91oORukeffnXIhjtwZcuh4Bh300O3bTLZi+Q9n0Ljj3QqQ+nwlFcEA0ZSsnnvD1/ejX06yuzNvJg9RWmSac4Sj1Ah6we288+X+MODU/3XRsUtSFnrFYMhaOfDJ+tuXVgZ5C2tu3OtGkB+u+y23RokRlvtE2PBdfUwxxwCe6sK4gsMRf8PDDu2wV5OTccT2f0Eu4eEYnVqfVEt3t0/SA0r

CWE-89: Improper Neutralization of Special Elements used in an SQL Command - Abhilfemaßnahmen und Erkennung

CWE-416: Use After Free (UAF)

CWE-416: Use After Free

Kurzbeschreibung:

Referenzierung von Speicher nach der Freigabe kann dazu führen, dass ein Programm abstürzt, unerwartete Werte verwendet oder Code ausführt.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Programmiersprachen:

C, C++

Betrifft:

Verfügbarkeit, Vertraulichkeit, Integrität

CWE-416: Use After Free - Triviales Beispiel

char* ptr = (char*)malloc (SIZE);
if (err) {
  abrt = 1;
  free(ptr);
}
...
if (abrt) {
  logError("operation aborted before commit", ptr); // Use of ptr after free
}

CWE-416: Use After Free - Beispiel

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BUFSIZER1 512
int main(int argc, char **argv) {
char *buf1R1, *buf2R1, *buf2R2;
buf1R1 = (char *) malloc(BUFSIZER1);
buf2R1 = (char *) malloc(BUFSIZER1);
printf("buf2R1 -> %p\n",buf2R1);
free(buf2R1);
buf2R2 = (char *) malloc(BUFSIZER1);
strncpy(buf2R1, argv[1], BUFSIZER1-1);
printf("[FREED]   %p\n",buf2R1);
printf("buf2R2 -> %p\n",buf2R2);
printf("buf2R2  = %s\n",buf2R2);
free(buf1R1);
free(buf2R2);
}

Fragen:

Wird dieses Program bis zum Ende laufen oder abstürzen?

Welche Ausgabe erzeugt das Programm?

Ist die Ausgabe bei jedem Lauf gleich?

MTAwMDAw:ND2clsRk9Zwu4BRR3DOr4W0x9Ux4tSgewi5CGip2nZY=:d9tdbzw5iYu2i/W2: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

CWE-416: CVE-2006-4997 IP over ATM clip_mkip dereference freed pointer (Linux Kernel)

// clip_mkip (clip.c):
    198 static void clip_push(struct atm_vcc *vcc,struct sk_buff *skb) {
    ...
    234         memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data));
    235         netif_rx(skb);
    236 }
    ...
    510         clip_push(vcc,skb);
    511         PRIV(skb->dev)->stats.rx_packets--;
    512         PRIV(skb->dev)->stats.rx_bytes -= len;

// netif_rx (dev.c):
    1392 int netif_rx(struct sk_buff *skb) {
    ...
    1428        kfree_skb(skb); //drop skb
    1429        return NET_RX_DROP;
MTAwMDAw:9Io5tNCChE1xvmq1MD/er1rg0PLo3BPNs/XfIeDBO5c=:ZpRYSCkGBqJ56GIL:VRtqalb9gKoA030GUxlOpnAmzYLosRKJIo4XXp9NrOY8d6rh8rTqYG56/HH78cPNGTw9xmswjLdE9fvKbuRVXw59Cp03NRZAYTW29aeahLIOcX5/bjctTgC7f8SBgZhDJ47v56AE3FHmgtom4NuekU600/QB03JUiwPiQQStbnPuyaNrYuwjMKDtBABJRjH61UqJbHuNYiMv0+GqSkeX4pkoiXTJGqm6T2GDstXJRMX7IxmMFkY6Z6MqBfvbTtFAa+heNqgca0FmTtv8BsQUYvalayA=

CWE-416: Use After Free - Abhilfemaßnahmen und Erkennung

Empfohlene Lektüre: One day short of a full chain: Real world exploit chains explained (In Teil 1 wird eine UAF Schwachstelle genutzt.)

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

CWE-78: Improper Neutralization of Special Elements used in an OS Command

Kurzbeschreibung:

Alles oder zumindest ein Teil eines Betriebssystembefehls hängt von extern beeinflussten Eingaben ab. Es erfolgt jedoch keine Bereinigung spezieller Elemente, die den beabsichtigten Betriebssystembefehl verändern könnten.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Betrifft:

Verfügbarkeit, Vertraulichkeit, Integrität

Arten:
  1. Ein bestimmtes Program wird ausgeführt und die Nutzerdaten werden als Parameter übergeben.

  2. Die Anwendung bestimmt basierend auf den Nutzerdaten welches Program mit welchen Parametern ausgeführt wird.

CWE-78: Improper Neutralization of Special Elements used in an OS Command - Beispiel (Java)

...
String btype = request.getParameter("backuptype");
String cmd = new String("cmd.exe /K \"
c:\\util\\rmanDB.bat "
+btype+
"&&c:\\utl\\cleanup.bat\"")

System.Runtime.getRuntime().exec(cmd);
...
MTAwMDAw:dB66B8Rw/9wlpG9y44R3M+rGyWteJa3ybFHepsSNu1w=:m56mm0hrJSZFdZ+5:SocAdosO2qKiWZAICQmYmBsAHRFkrM8c6Immx/7T+mi+zoZGfXhVwbPpBPIaKxFU8IvBPreaDkAvVqDhdYXv87wIrGAzVmb28Mi9fwLWXCqUGDocJ4aeY/yzY5oNQP58lIZzJ8cEJo7RaR3U8MdHv/65XoJQRVLvqa/aH1f3kc9VbJTQxaMxTLGPfQEZBUXX/DMs/6dtPVe9kwegbOP/4lacu0QLBvDwzYXa00eyNFupnFk9cPcyrlV/DYJ7nk51V6BeuhpyOKMTYaRaDihZyw9rdZudjka3OWRPPmuehzmRLMmtDMLGmtRfCdaSylCigNnTOGTkz/7RQuha23dkFojn6gHGtb3RG+s=

CWE-78: Improper Neutralization of Special Elements used in an OS Command - Abhilfemaßnahmen und Erkennung

CWE-20: Improper Input Validation

CWE-20: Improper Input Validation

Kurzbeschreibung:

Empfangene Eingaben oder Daten werden nicht nicht oder falsch validiert in Hinblick darauf, dass die Eingaben die Eigenschaften haben, die für eine sichere und korrekte Verarbeitung der Daten erforderlich sind.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Betrifft:

Verfügbarkeit, Vertraulichkeit, Integrität

Anwendungsbereiche:
  • Rohdaten - Strings, Zahlen, Parameter, Dateiinhalte, etc.

  • Metadaten - Information über die Rohdaten, wie zum Beispiel Header oder Größe

CWE-20: Improper Input Validation - zu verifizierende Werte und Eigenschaften

CWE-20: Improper Input Validation - Beispiel partielle Validierung

C:

#define MAX_DIM 100
int m,n, error; /* m,n = board dimensions */
board_square_t *board;
printf("Please specify the board height: \n");
error = scanf("%d", &m);
if ( EOF == error ) die("No integer passed!\n");
printf("Please specify the board width: \n");
error = scanf("%d", &n);
if ( EOF == error ) die("No integer passed!\n");
if ( m > MAX_DIM || n > MAX_DIM ) die("Value too large!\n");

board = (board_square_t*) malloc( m * n * sizeof(board_square_t));
...
MTAwMDAw:Wy7yqgY8agOHlHpgD418S3qvE0E8P6G7BJXwqg0kpHI=:rxGi8IzzlWYLqw9H:HUaKpgTZ65bdFvwA/ITq/PPK8I95SKgVsV3U5cRqJZeGWotbPVMpXPzDRq9JyyJDRwJT8Lw/Fs1sOjPwjtx0/ldwBbJADgKBzWwRCBW1HD0/s/jygQ5jZyCtbjsjEGCCSx94nTAliTZZcGlmkV//zhOGtcFJ+kQGkkYNwnvn4UnRR5pG/Eey27PNrJCiIOlLvOct3AXsDs7Ro/EGjgXJCgenJQ6jqYyI2YYPZ6pwT54VouXMVnGrfXCPE1A=

CWE-20: Improper Input Validation - Abhilfemaßnahmen und Erkennung

CWE-125: Out-of-bounds Read

CWE-125: Out-of-bounds Read

Kurzbeschreibung:

Daten vor oder nach einem Puffer werden gelesen.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Programmiersprachen:

C, C++

Betrifft:

Vertraulichkeit

Auswirkungen:

Umgehung von Schutzmaßnahmen; Lesen von Speicher

Die Ausnutzung dieser Schwachstelle ist häufig schwierig, da nicht immer bekannt ist welche und wie viele Daten gelesen werden können. Es kann allerdings möglich sein Speicheradressen auszulesen. Dies kann ggf. genutzt werden, um Mechanismen wie ASLR zu umgehen.

CWE-125: Out-of-bounds Read - Beispiel: partielle Validierung

C:

int getValueFromArray(int *array, int len, int index) {
int value;

// check that the array index is less than the maximum length of the array
if (index < len) {
    // get the value at the specified index of the array
    value = array[index];
}
// if array index is invalid then output error message
// and return value indicating error
else {
    printf("Value is: %d\n", array[index]);
    value = -1;
}
return value;
}
MTAwMDAw:Y5OzHxEC70mrJFzVlzRrkRB2XEmDznVZLZHrO6Pac+8=:YctidRBQc3TSswrP:33qRYqej7CoB6BYQ17gM+yVjkGUC0HG0EXwJZgvNKNikuUeLeoyr1H0nb680CY50hMDKimG6o01nER8o8siUHCK0padRM5hMff4L+NFqQdQVsXTa679FP/bSrJKLVlBzHh+PJlQPS/5TNrIxj139pL7qt+v6OLjC/DzeR9rm5i1RJRo3ve/LExKNpE+qFdsGVVPvkmkt8XmclSGdJzg=

CWE-125: Out-of-bounds Read - Abhilfemaßnahmen und Erkennung

CWE-22: Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)

CWE-22: Improper Limitation of a Pathname to a Restricted Directory

Kurzbeschreibung:

Externe Eingaben werden für die Konstruktion eines Pfadnamens verwendet, der eine Datei oder ein Verzeichnis identifizieren soll, das sich unterhalb eines eingeschränkten übergeordneten Verzeichnisses befindet. Eine Bereinigung spezieller Elemente innerhalb des Pfadnamens erfolgt jedoch nicht ordnungsgemäß, was dazu führen kann, dass der Pfadname zu einem Ort außerhalb des eingeschränkten Verzeichnisses aufgelöst wird.

Wahrscheinlichkeit des Missbrauchs:

Hoch

Betrifft:

Vertraulichkeit, Integrität, Verfügbarkeit

CWE-22: Path Traversal - Beispiel: fehlende Validierung

PHP:

<?php
$file = $_GET['file'];
include("/home/www-data/$file");
?>
MTAwMDAw:3gLPQVazZ7o85d1CvoxRmknte7FJZUYQY86EMgPRK1Y=:TRfF4DOpFs1c1lI+:Rhl6mGetzdneOEI8FGmzsftQGEoWhumMYuGZJU/gyjjDzg8WysCDgXMqE7AjeuxdHned12QRY5hmiFIoqjBsbSvHNlQQ92MCQ60qyhfybxbziZO8a5CmjcQC94qhlh0L8jdLEYwMB1lKltuskw1f1rusT1RAGnHpgTZ/Hnuj9aiNxWwyNtFPz/odPCfgtvsFzPOW3g==

CWE-22: Path Traversal - Beispiel: partielle Validierung

Perl:

my $Username = GetUntrustedInput();
$Username =~ s/\.\.\///;                # Remove ../
my $filename = "/home/user/" . $Username;
ReadAndSendFile($filename);

Java:

String path = getInputPath();
if (path.startsWith("/safe_dir/")) {
File f = new File(path);
f.delete()
}
MTAwMDAw:8uTO0iLAU3gPyyhD1rOrlbO3fjLmTmLKc4c6Ag0LzbM=:PJH17Y1yzg2GPXQN:iXe3y7P3dMuwWDksP30EwkCYbivXY3qFK0F90JO4wzaAwMSOAsvjkBpclOajrlybXAsyVJAE2wGu5wYZet+fZ+Hg4moW+SqY3jOpS+5M3fwHZk1Bm0fLn1PWXiZGEuCElXZcUfU88UZWevMOlqlNfn427O11S4LkFfXJFwLNdNpRHIsEmfZk1aqg9jLD/PO47okDqwVhnSTPLm/PJJE09EBt1MPESCqW+LC0Ed3sG9hyQ5nxfZivolnK0pRNGtuerNJ0aLBMHg0Ufn4runaOQOLTRfQjoCavrti2OOskMZVAaMnZaD9VNlYcCWIRcyV8Zv5rOwZh4+zc3GS9QmpBYC4VRtQAQQHeNJPpMFyOCcsCp9vxCSTZikU0DWfltzefIoJm9fZvRAWwPhXeGnAkA6ZYH+DEpLMNG7YtP5g1m2tiV6+ysJpyb4J0M6PClzRkY1pEelzZhI4apkpB+407FESULTciwADthbGIfTgvf9fZ6KajRSOoYoYdVkKKVtwSECLmf9RCjlGOiwiA1UzaQCS5Oore6gn8fPJMPfpxxVS1uqMV//d3WwcWi51KFjGR/wgWIlyBYb3lLuhwNbbiQ3yNM7DAfmobFBODj92wFtIfittPnX6C7SBCzpmjfDM8qEI6kHX12CQ1WXVoxZqmkD9SaWZc0SlKy4u1+58GxDmK3swecrCd2iDRPwBrL8qDZAlJRMEMBXBQaJLKZCHkF5CkQApUYeQbmpqeNNJQlHI8SATbsBU2pCredkXGgkb6EMoWyS57AB17LxSVNWKdakiZ78f/QyU7JnkPVEWYNaLBCn3n+W9v3t940IX5wbWBpFUf4mAOjVWQ99BgmjAxIwjGm3oLWDQa8BK+mQnfmoQPVdgVagPVS+PDnvG2kERVpwKAtkG5G45R0gD2KV7JPmQPQdtEfMhcQWB3/Os9DAkXP0vE7EObtkqObJWcacE4mg==

CWE-22: Path Traversal - Beispiel: verwirrende API

Python:

import os
import sys
def main():
filename = sys.argv[1]
path = os.path.join(os.getcwd(),
                    filename)
try:
    with open(path, 'r') as f:
    file_data = f.read()
except FileNotFoundError as e:
    print("Error - file not found")

# do something with file_data

Dokumentation os.path.join:

Join one or more path components intelligently. The return value is the concatenation of path and any members of *paths with exactly one directory separator following each non-empty part except the last, meaning that the result will only end in a separator if the last part is empty.

If a component is an absolute path [...], all previous components are thrown away and joining continues from the absolute path component.

Python 3.11.7

CWE-22: Path Traversal - Abhilfemaßnahmen und Erkennung

CWE-352: Cross-Site Request Forgery (CSRF)

CWE-352: Cross-Site Request Forgery (CSRF)

Kurze Beschreibung:

Die Webanwendung prüft nicht bzw. kann nicht prüfen, ob eine Anfrage absichtlich von dem Benutzer gestellt wurde, von dessen Browser sie übermittelt wurde.

d. h. eine CSRF Schwachstelle nutzt das Vertrauen aus, das eine Webseite in den Browser eines Nutzers hat. Bei einem CSRF-Angriff wird ein legitimer Nutzer von einem Angreifer dazu gebracht, ohne sein Wissen eine Anfrage zu übermitteln, die er nicht beabsichtigt hat und auch nicht bemerkt.

Missbrauchswahrscheinlichkeit:

Mittel

Auswirkung:

Hängt von den Nutzerrechten ab

Ausmaß:

Vertraulichkeit, Integrität, Verfügbarkeit

CWE-352: Cross-Site Request Forgery (CSRF) - ursprüngliche Form

Cross-Site Request Forgery (CSRF) - ursprüngliche Form

CWE-352: Cross-Site Request Forgery (CSRF) in 2023

Fiber ist ein von Express inspiriertes Web-Framework, das in Go geschrieben wurde. In der Anwendung wurde eine Cross-Site Request Forgery (CSRF)-Schwachstelle entdeckt, die es einem Angreifer ermöglicht, beliebige Werte zu injizieren und bösartige Anfragen im Namen eines Benutzers zu fälschen. Diese Schwachstelle kann es einem Angreifer ermöglichen, beliebige Werte ohne Authentifizierung einzuschleusen oder verschiedene böswillige Aktionen im Namen eines authentifizierten Benutzers durchzuführen, wodurch die Sicherheit und Integrität der Anwendung gefährdet werden kann. Die Schwachstelle wird durch eine unsachgemäße Validierung und Durchsetzung von CSRF-Tokens innerhalb der Anwendung verursacht.

CVE-2023-45128 (übersetzt mit DeepL)

Identifizierte Schwachstellen: CWE-20 Improper Input Validation, CWE-807 Reliance on Untrusted Inputs in a Security Decision, CWE-565 Reliance on Cookies without Validation and Integrity Checking, CWE-352 Cross-Site Request Forgery

CWE-352: Cross-Site Request Forgery (CSRF) in 2023

Standardtechniken, die CSRF verhindern sollen:

Auch diese Techniken lassen sich ggf. (alle zusammen) aushebeln, wenn die Anwendung weitere Schwachstellen aufweist. So gibt/gab es Anwendungen, die Anfragen, die nur über ein POST request gestellt werden sollten, auch bei einem GET akzeptiert haben.

In allen Browsern wird in der Zwischenzeit für Cookies die Same-site Policy angewandt mit dem Wert Lax. Dieser Wert hat zur Folge, dass Cookies nur dann gesendet werden, wenn der Nutzer explizit auf einen Link klickt oder sich innerhalb der selben Seite befindet.

CWE-434: Unrestricted Upload of File with Dangerous Type

CWE-434: Unrestricted Upload of File with Dangerous Type

Kurze Beschreibung:

Es ist möglich potentiell gefährliche Dateien hochzuladen bzw. zu transferieren, die von der Anwendung automatisch im Kontext der Anwendung verarbeitet werden.

Missbrauchswahrscheinlichkeit:

Mittel

Auswirkung:

Bis hin zur Ausführung von beliebigen Befehlen

Ausmaß:

Vertraulichkeit, Integrität, Verfügbarkeit

CWE-434: Unrestricted Upload of File with Dangerous Type - Beispiel

HTML:

<form action="upload_picture.php" method="post" enctype="multipart/form-data">
    Choose a file to upload:
    <input type="file" name="filename"/>
    <br/>
    <input type="submit" name="submit" value="Submit"/>
</form>

PHP:

// Define the target location where the picture being
// uploaded is going to be saved.
$target = "pictures/" . basename($_FILES['uploadedfile']['name']);

// Move the uploaded file to the new location.
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target)
MTAwMDAw:g1i1kjJVutvi8JM4d5luymFCnmPvxTXsoWHZm1E3SnE=:0Zi/sCPwhPhf2uUJ:2f+Z6iJU9k00W5bXrQTvDDkf/EsMOIAxj2tAV5C6yjefXfryFYbpSlXdgdovAyCOnwgwT3FF3Eb8BKNeWbO2GVXhzYDeUehZEUVfILAemuBd8QmzK9TWrij+4xw4taKMkaK6PNwEQkxasuPc4P/Kg+ByRD9E2zt71jZb9I+4zhl6TMZlKEYVEZVPDxct/cTEUungoi4dlltlVszwyjxeO/SqReTqdO174UbRzoye+nKwq97l9oaq9SSk/gogvN7sh0Qw5RJ1XcxrEX4syIVW9q/rPOSj0jilRquaTAU+5nexJZtn+QYmlEWyUI+cUe7UcR09YFVf8f5SykJ35j8kqerZH4NsVVF9/j2Z0NPiXLU483fy2t9CPqsh0TRpNA0KHs49q0xuVDKirxA/yWjxLhdgRInagcN27Sg+FO3p2HTPpAhBlYn5sGsMPApKVkgSBenUmbKx2xyPrjliYwfabD6bBk5F523vtpctUDyjL9BOKuGffi0eNLG8iBi1Z88Oys3w2crAcYrI+Ex44vvpbYb15U9wcvwH1mlv3blLLZOKYAVTQ1nTrv7osaVJNFoM64QGztkktU1uYbYFvAJWq6jrA+7C7DXEyuq8Y4ThMHDvDS6CzhcP7nlRmBROKZgJGLpAtVGbhvTqhGIF6wFXQfXoP9OZDDnfYcjjtJKsThVXdSDBtiPBXeNXqgd2JwYrlx7fwzAhzm35Ay0GWbQydYjn/pJdIFxaDLo1Zv5/sTOB1NC3SESyYskIFftO2UOtWF93Ub4TInb/YEfA/K7YnUqDwsBAjO2EVTD2MxjRN1Unx0aSEgGp+HBo/FKP7YPsFXIe823eyVxxY76c4ottKREdaf/Q4gbnljI7q4KUD5FREixR8prmVP8H6ZpVrB46B02EeHQ3ioTtJbyrwbxW6rHh3En+Vwy7hHqxlqfMzZMQKTf8uokmu31RZryNWYIWHAfmU/kAb57g5JHIOv/pLsrSE2Zo2TxNDTNal8Nwh4efIZlNKqBHrhdBd582kvHkMgI1wW3L+pnvSDwE56k8S/DRyffNKy9hyo7ahV1XB+osOR5V7NSSbJ4TqLhRClkZ+ZMd4p21p99+ecoAI70H6LNukau9tusFMDcxGCcrqPkaU3aj2BFPs7iDqz2fk872EJEQpwF/sKopsi/UiRdHvX/vom/kp+mj72o4Sk3pp12hriEOwlCqIbG+f8qMIuGm7P/AomIWYQW1hrdjCWG5IIKjgfbGsBCMN5Y=

CWE-434: Unrestricted Upload of File with Dangerous Type - Abhilfemaßnahmen und Erkennung

CWE-122: Heap-based Buffer Overflow

CWE-122: Heap-based Buffer Overflow

Kurze Beschreibung:

Ein Pufferüberlauf, bei dem der Puffer, der überschrieben wird, auf dem Heap alloziiert wurde, was im Allgemeinen bedeutet, dass der Puffer mit einer Routine wie malloc() allloziiert wurde.

Missbrauchswahrscheinlichkeit:

Hoch

Sprachen:

C/C++

Auswirkung:

Bis hin zur Ausführung von beliebigen Befehlen

Ausmaß:

Vertraulichkeit, Integrität, Verfügbarkeit, Zugriffskontrolle

CWE-122: Heap-based Buffer Overflow

Basisbeispiel in C:

#define BUFSIZE 256
int main(int argc, char **argv) {
    char *buf;
    buf = (char *)malloc(sizeof(char)*BUFSIZE);
    strcpy(buf, argv[1]);
}
MTAwMDAw:DXy/XvcNtZIDpEHWJkdAgwpwCGETbSPC9dLl0a/DwGY=:CtMpPlmTtvSGwDcr:85DmH0RCIH8+c6yjtigSB3t8GVWm0OlJREmOSSvug7L2kbdLY0Anr7hqWbM+sb8u4Q//2nuqW0iTwduhgoeJR1X6bHPEcXyVoMAC2moVw/Qk5Rhg9FgnE2VrZeqRNho9s+7ALhPO44bYXW2yJUM=

CWE-122: Heap-based Buffer Overflow - Abhilfemaßnahmen und Erkennung

CWE-502: Deserialization of Untrusted Data

CWE-502: Deserialization of Untrusted Data

Kurze Beschreibung:

Nicht vertrauenswürdige Daten werden deserialisiert ohne - je nach Bibliothek notwendige vorhergehende - Prüfung, dass die Daten die erwarteten Eigenschaften haben.

Missbrauchswahrscheinlichkeit:

Mittel

Sprachen:

Java, Ruby, Python, PHP, JavaScript, ...

Ausmaß:

Insbesondere: Integrität und Verfügbarkeit (DoS); weitere Effekte sind vom Kontext abhängig.

Alternative Begriffe:

(Un-)Marshalling, (Un-)Pickling

Bei der Serialisierung werden programminterne Objekte so verpackt, dass die Daten extern gespeichert und/oder übertragen werden können. Die Deserialisierung kehrt diesen Prozess um.

CWE-502: Deserialization of Untrusted Data - Beispiel

Java

File file = new File("object.obj");
try ( FileInputStream fin = new FileInputStream(file);
      ObjectInputStream oin = new ObjectInputStream(fin)
    ) {
    javax.swing.JButton button = (javax.swing.JButton) oin.readObject();
    ...
}

In diesem Beispiel wird ein Objekt aus einer Datei gelesen und in eine Variable vom Typ javax.swing.JButton geschrieben. Der Typ des Objekts wird nicht geprüft. Es ist möglich, dass die Datei ein Objekt enthält, welches vom Typ javax.swing.JButton ist, aber nicht die Eigenschaften hat, die ein Button haben sollte. In diesem Fall wird keine Exception geworfen, aber das Objekt kann nicht wie erwartet verwendet werden bzw. es kommt zur Ausführung von beliebigem Code.

CWE-502: Deserialization of Untrusted Data - Beispiel

Python

class ExampleProtocol(protocol.Protocol):

    def dataReceived(self, data):
        # ... parse the incoming data and
        # after receiving headers, call confirmAuth() to authenticate

    def confirmAuth(self, headers):
        try:
            token = cPickle.loads(base64.b64decode(headers['AuthToken']))
            if not check_hmac(token['signature'], token['data'], getSecretKey()):
                raise AuthFail
            self.secure_data = token['data']
        except:
            raise AuthFail
MTAwMDAw:fwdlzjXY2Q+4RCDfgFj0K7Jfa3XLxlIMd/pZX2mWtlc=:7jmav6nyfV738SZm:jIiQlftw3dRlov/L4eSnEVCnZSu9XoerW5oRlxGDHFrt3ytTwaiwS3vQ6Asfi4VU/FzWXfOWSIbPNFWZjEgx7gwoJ1CaO64w6oy+ijzfnhfkePL5p560YBnhv5wbOD29zdTrIwTSZxATsW6If7GC/X1vTkyoF05OIA4Tc6OGjEgYSe/qWVGSkv966agKLVgw5IEs9WVdYy9daAQUs86WSgalFvNQGz8FmmiwV7ePUJH+TwT6bIklqN7OnaOTlaD1xN6XmvQshqpZ1pQbMVXp/YpSs5o0Hppvj91a09zxC8cfWv/5vDxXfpNJf0QcKduAVPVN115L6Y5bV7G86BU/7S3Z+poREM7ph2vMGDL+JFiosodu4UUw4U7tJnLOzFG1k8KQWw3q+KI7MQxH62D/Cs8LenuXIHp3GX4TvrrEocTVkFApD/1wzZzaPScR3gEI7r6bfB7GXKkWXg1cGET+YSo5gLUMo2fet/BjjCwTJXkm2dA8hu/z4KTA4vON3/Vk2vVyNOI0dZ1gSAyIPqq/kBbVFEDYE2e0MEsjSvdPRirEPfKEgPhSqztKDiL8tiD/IgzveDZz5/cD9sFphmM4/Er5OI/kLiDYyqbXAJOVyoG9g25DqIfytnISOF2vEWztK0A2WPEAyrOK0IC7qw87jsM/OPHDpMn8qQ6zvriyIp3y2gUpY/vKSt7LiAamwfK4V1Tbr4NN3Ypn099hWnm7H+ID9qNpNe2Lfyc93Sh9GxMNfWROSXbXhissxNY++h9U3Owa3lCiEmVzxrJBITOcZooEnQtkkO2XO1ngBGfVM/hz/8TOvSOdZaP1TSRnOqVk1NTGJmYdVgFdh59sGZ3PqJu46eWRt4y/yn0md0A0U3aZW9GAJ2zWtJoo6n0Pbd420dG7h6JW+a4rEXb8JPNDxZbtU+hIgmTewY3u4pbqTBdTLM2Ku7vN/8vRYac5pk4rQhOBPM9BeT2NI/n0

CWE-502: Deserialization of Untrusted Data - Abhilfemaßnahmen und Erkennung

Empfohlene Lektüre: Deserialization Vulnerabilities

CWE-918: Server-Side Request Forgery (SSRF)

CWE-918: Server-Side Request Forgery

Kurze Beschreibung:

Der Webserver erhält eine URL oder eine ähnliche Anfrage und ruft den Inhalt dieser URL ab, stellt aber nicht sicher, dass die Anfrage an das erwartete Ziel gesendet wird.

Technologien:

Webserver

Ausmaß:

Vetraulichkeit, Integrität

CWE-918: Server-Side Request Forgery

Server-Side Request Forgery (SSRF)

CWE-918: Server-Side Request Forgery - Beispiel: CVE-2002-1484

Beschreibung:

Wenn der DB4Web-Server so konfiguriert ist, dass er ausführliche Debug-Meldungen verwendet, können entfernte Angreifer DB4Web als Proxy verwenden und über eine Anfrage an eine URL, die die Ziel-IP-Adresse und den Port angibt, TCP-Verbindungen zu anderen Systemen (Port-Scan) versuchen, was einen Verbindungsstatus in der resultierenden Fehlermeldung erzeugt.

PoC:

http://127.0.0.1/DB4Web/172.31.93.30:22/foo

Workaround:

Der Hersteller betrachtet die Funktionalität nicht als Fehler, sondern als nützliches Feature für Entwickler. Um die Ausnutzung dieses Features zu verhindern, muss die Standardfehlerseite durch eine benutzerdefinierte Fehlerseite ersetzt werden.

CWE-918: Server-Side Request Forgery - Beispiel: NodeJS Unicode Handling Fehler [1]

JavaScript:

var base = "http://orange.tw/sandbox/";
var path = req.query.path;
if (path.indexOf("..") == -1) { // check for no directory traversal
    http.get(base + path, callback);
}

Beispiel URL (U+FF2E Full width Latin capital letter N):

  http://orange.tw/sandbox/NN/passwd
≙ http://orange.tw/sandbox/\xFF\x2E\xFF\x2E/passwd
≙ http://orange.tw/sandbox/\x2E\x2E/passwd
≙ http://orange.tw/sandbox/../passwd

CWE-918: Server-Side Request Forgery - Beispiel: URL Parser vs. Abfrage der URL

PHP (> 7.0.13):

$url = 'http://foo@127.0.0.1⬜@google.com:11211/'; // ⬜ is "just" a space
$parsed = parse_url($url);
var_dump($parsed[host]); // string(10) "google.com"
var_dump($parsed[port]); // int(11211)
curl($url);

Ergebnis:

curl fragt die URL 127.0.0.1:11211 abfragen.

CWE-918: Server-Side Request Forgery - Variante: Blind SSRF

Bei Blind SSRF-Schwachstellen werden auch Back-End-HTTP-Anfragen an eine bereitgestellte URL gestellt, die Antwort der Back-End-Anfrage jedoch nicht an die Front-End-Antwort der Anwendung zurückgegeben.

Empfohlene Lektüre: Blind Server-Side Request Forgery (SSRF)

CWE-918: Server-Side Request Forgery - Abhilfemaßnahmen und Erkennung

CWE-843: Access of Resource Using Incompatible Type (Type Confusion)

CWE-843: Access of Resource Using Incompatible Type (Type Confusion)

Beschreibung:

Eine Anwendung initialisiert eine Ressource mit einem bestimmten Typ (z. B. Zeiger (Pointer), Objekt, etc.). Später wird auf die Ressource (Variable) dann mit einem anderen Typ zugegriffen.

Sprachen:

insbesondere (aber nicht ausschließlich) C/C++; im Prinzip in jeder Sprache, die automatische Typkonvertierungen durchführt.

Ausmaß:

Integrität, Verfügbarkeit, Vertraulichkeit

CWE-843: Access of Resource Using Incompatible Type - Beispiel in C

#define NAME_TYPE 1
#define ID_TYPE 2
struct MessageBuffer {
    int msgType;
    union {
        char *name;
        int nameID;
};  };
int main (int argc, char **argv) {
    struct MessageBuffer buf;
    char *defaultMessage = "Hello World";
    buf.msgType = NAME_TYPE;
    buf.name = defaultMessage;              // printf("*buf.name %p", buf.name);
    buf.nameID = (int)(defaultMessage + 1); // printf("*buf.name %p", buf.name);
    if (buf.msgType == NAME_TYPE) printf("%s\n", buf.name);
    else                          printf("ID %d\n", buf.nameID);
}
MTAwMDAw:Ax8Xn5RfZPiHkuARs3g56AMVXIbjf6MaLyKYX6SIhLM=:65tR6sgwy7JQize7:ZX4k6FHlFTsxxeo5X4zgUVAc6lL6lfGk+rNCe6pkmAYAyJoMhBvH4gQo/5mDrgMDbmblBRItJXF287HdcA+0gai2Kh7Xg1XtgGC15s22GdUA4l1XTyVKJ5VcYsBMxfbzIP+BrPNGhdz5eLtgBPks4TTX2hJMncEEADJfaMCHzcXQ3htqfae+8ifKGld3g6YAf2FoDXn+WNIDB1kVFXFPXc8AlMjngKvNGERJDVIqKyRik1uqZVaI4A2xLPqgzlhj9gBfZMW/Fauw5RXmFxavJBwETUXQYMryz5/K9e5/F9+2yZanXxAsusbEYZk4Ub1M0GnVRIezmlTjHAMHjTNJhO4GjN/IJw8n6Mlu8ixaSSf8cclltNP+46lCpRml8DB1euq6lMjy0s5XOPxLcmYMrM0TqOo5qrqN6tNr6PiKEHmhkVN2iYstB0B5b4JrMypmHsxhdmNrCZGP4Ol7C8589VPpGxuIIj2aHHGeoDY8chcENUiS1A7bL5RR7LXgktm1ikhThZSgg8PNAWd6/JXKbdq6tYqkdXD6RuX7YE81au7lBpeisoSouACNOdeTsU33tmRq+05LNnBnoKBn93kVNyDZOT77P1kQQQSnHs2QaBVT2eNZE18sU9Rh+GHXg14cRLTSFlkpo6WltSyAK0smY/BW9co/+gs=

CWE-843: Access of Resource Using Incompatible Type - Beispiel in Perl

my $UserPrivilegeArray = ["user", "user", "admin", "user"];
my $userID = get_current_user_ID();
if ($UserPrivilegeArray eq "user") {
    print "Regular user!\n";
}
else {
    print "Admin!\n";
}

print "\$UserPrivilegeArray = $UserPrivilegeArray\n";
MTAwMDAw:QASJf5wzWY9AbtS1aUMu8jeE6GjkK6yQJY5RvdNW77g=:NGCjiVtvSZh2m3cn:UVBClrfHzLoPV/rGNTst63ACADXtrrs2WO04oYn0f4IIZg85/H0K60+RhCnAV+g8dLqY2ZnSm43ky3WsxPZjEwo1ZEdGQriYxFf6Z1oxV0ISj2/Z9p68H3ALMXWjU5JEbTpZUsVKAuNimlymeymKnezGw8N/5tH8GcvhydZ509rPCYOuXV5zuaR5gTx6Uneg9AszLfVm7KHifWPslz2Pd6MA4a4zDd3BuJoi864qP5egIMtC4UREHWqJD+AX5u6NU+bXEckZIP0hJQgfSppBwDSu9/He9G3ZOhVjB72H9L5xSjTDzGJxsTDab4e56/VWxrWIsRIBigd9c8CVnHCwSd8hAesNev0TrP4Hr9M4Xw9cwUGKw07uXwWCKQiwKDXI6D4QgLFosO4n41OpZlNei3TCKWn1p8vx9uDpQs1sjYpNwrVtYo2nQNcb/0FDaeZYK+Ev0KWP69q7zF9FEXt8L9joW+wQRPtqwu1KDjSf59At0LXcuCt0p5CDy5cTEGVHLfrqRRfMJ1aVCLjwXvsTfUq/zByr1NxGkcxq8SGSFm0iBsQN8Meg6rhj5BM6

CWE-306: Missing Authentication for Critical Function

CWE-306: Missing Authentication for Critical Function

Beschreibung:

Eine Anwendung führt eine kritische Funktion aus, ohne die Identität des Nutzers zu überprüfen. Kritischer Funktionen sind solche, die entweder signifikante Ressourcen verbrauchen oder nur von privilegierten Nutzern ausgeführt werden sollten.

Sprachen:

"alle"

CWE-306: Missing Authentication for Critical Function - Abhilfemaßnahmen und Erkennung

Dump C / C++

Dump C /  C++

C++ is missjudged by the White House

C++ is missjudged

Open Worldwide Application Security Project (OWASP)

OWASP

Übung: Schwachstelle(n) (1)

  1. Benenne die Schwachstelle(n) entsprechend der CWEs (ohne ID).

  2. Identifiziere die für die Schwachstelle(n) relevanten Zeilen im Code.

  3. Gebe - falls möglich - einen Angriffsvektor an.

  4. Skizziere mögliche Auswirkung der Schwachstelle(n) (z. B. Verlust der Vertraulichkeit, Integrität oder Verfügbarkeit; Umgehung der Zugriffskontrolle; beliebige Codeausführung, ...)

 1 #include <stdio.h>
 2 #include <string.h>
 3 void process(char *str) {
 4     char *buffer = malloc(16);
 5     strcpy(buffer, str);
 6     ...
 7     // ... definitively executed in the future: free(buffer);
 8 }
 9 int main(int argc, char *argv[]) {
10     if (argc < 2) { printf("Usage: %s <string>\n", argv[0]); return 1; }
11     process(argv[1]);
12     return 0;
13 }
MTAwMDAw:6RinVf6o/zwVC/wvT+jGpc32U9UFylI1nWCwjOTb7l0=:u7OrKCnQQczBWwe3:PLPY+eFnNgPbOioAlzvOZPA4Pcz7vvfWgzJgxHCZpKQB33Nr/zjRcqUEamyMGOVxp4a6CFYzXSfi0N/VlirIDtOuMiaVyZJI/JHbbwcwI8vcSclPmUNZOcUUgsu8x+Q8Hry7jugIxfIwdL4Hq90iWvU1CrsfYjRcC7zpx8eQAX9ncJticqGPtWoIxH4NURd5NoEN3feEkmCjd6NeNC111Inw2dfRhjMsTRw+14KxXGMLIqiq8CznGQFKMbvt6unSyx0340aDsGe6ptswE7YP7KCNCezrA93Ye5LdRvtHiP+prD9W/F67LPHYJhyXU84uFGPXUmilJlwnFN4z1jZMFRBTpF7TdEsfRu0By3pAZmP45vUvc3sD8K4dX/ID+/mDpbNy/VauUxi/nh9j1MVVmJ2GKOL2l3MDcjKvCgHWCjRO8DYQCXhC+K2J7EC+dedhfsZkbtuGMYdF/5p1QUBKErly6M7L9szywUCfRVzCSjpnS7z7smgui8Rn9zK8ICZaNYE3m+0go27nGFTNSq8nIwuSSrgxwR60O3/lz3wAFwfAUYTdE6wb3yybmVtV4DK43G7wF4hyxhJWxhcEoF/Q

Übung: Schwachstelle(n) (2)

Sie analysieren eine REST API die folgendes Verhalten aufweist, wenn man einem Blog einen Kommentar hinzufügen möchte:

POST /post/comment HTTP/1.1
Host: important-website.com
Content-Length: 100

postId=3&comment=This+<post>+was+helpful.&name=Karl+Gustav

Fragt man danach den Webservice nach dem Kommentar, dann erhält man folgendes zurück:

<div class="comment">
    <div class="name">Karl Gustav</div>
    <div class="comment">This <post> was helpful.</div>
</div>

Bewerten Sie die Schwachstelle: CWE Name, problematische Codestelle(n), möglicher Angriffsvektor und mögliche Auswirkung.

MTAwMDAw:fVIU4kU3SwKGZwESfO1OC7zPCw2AWas9amNXJEdYt48=:iZsRG0nSXCVHlTx0:mNd6VElX/Z3iC066HB4YgDqw5Ia+BlJw9CZpf2R0YWphqxCJ9KPmwPeYXefkhWA+rE0JkhlnKmkuAYDEP1AfnA5hNDvpnCX0RGrEsvPF1Ars3pLGLcXzTaHM6lMqSHDb87TdGyCyIV4wkj/ATxSQD2ti2HmPyGpdrW5nxgiQg/AzUhLPiXiDbCoawggPidTpWIiM3AI4+llQWeKoxqXhrUlNialp9KbD8jn1ptFVs4gfDMQRIgnE5Pb2yF2dbKReR0kuX6F4IffhEG3GLMbsocbCd1Z27omBfncimKLS1Pb5ipeaTQ2yyNONK2bW7wHXRySmOCGDDvS6YizhEUYwe94irryuQknPiAmZGDJdqDwSsjHs84Q9dwglqRBqf8n+iEcI7bWpYto8ILq9Jndkbzx3dzK4bW1Q79rVUzC07r5+4cwFXm2OYP9Q6xkMDFcjRFY6VqhTXFKhP2xiOvLm1qgf0OFAIti4Hv5ZeeiREbZT48FydKYd5iSZxgheGruvhgq9eiEf+CAzpIWwqJr880aKXluJfTXnkbOW4wAHkQIGaogUScgmSTE90p3JgtZOAXRKdHtOrMwIXP2t3YNuZPXPBffHyGizjyAa3w1kbEAqlpjvN0u4XbryOLokD1oJnXWkEjQcEBE8yUJdBA8KJOEv2T/+RhKAxDtVS4mjaMWuhC1AA10nCsWhXWi7EwkPYL8H9KpDFMQkn66rs2DadJNBZpuDu5jYNtWeBtE=

Übung: Schwachstelle(n) (3)

Java:

1 String query =
2     "SELECT account_balance FROM user_data WHERE user_name = "
3         + request.getParameter("customerName");
4 try {
5     Statement statement = connection.createStatement( ... );
6     ResultSet results = statement.executeQuery( query );
7 }

Bewerten Sie die Schwachstelle: CWE Name, problematische Codestelle(n), möglicher Angriffsvektor und mögliche Auswirkung.

Übung: Schwachstelle(n) (4)

Sie beobachten folgendes Verhalten einer Webseite:

Anfrage

https://my-website.com/search?
      term=This%20is%20a%20%3C%22%3Egift%3C%2F%22%3E

Antwort

<div class="search-result">
    <div class="title">This is a <">gift</"></div>
</div>

Bewerten Sie die Schwachstelle: CWE Name, problematische Codestelle(n), möglicher Angriffsvektor und mögliche Auswirkung.

MTAwMDAw:ftNcLIdvboBzJYicOp9DJ7qn9Rpt7vtEptygS+QnJOs=:XSGslkeObFoUmefA:zVn81Us+UzU0mzEMyML3ymVbD+WLU5pS659eKktor2IOXV2dRbWOUJHrpR49y/jbXWgX+akOJLpyGpHYTHFKJhQdAe/usSypg0dCccxwZ67AVH2O99B07ULErd9Tsu4UEqhUy4nD0nsFu3v9Uq4dywGAFEQ9SASULhTTfQ4ES/Qpnc7UkMu+T4DYf54+yGfeSOj/oFu4WHHJFU5tKMfLmuT4TG9oFHqgkua0KPJ5VfPKQjfv+NgiZi+ojvdrCEhn0OZaNjwVOrDrlpNLcYVlzeLdQWJufe7fzMhTJowHZ2Pk/k2UC5CyLxAdn7KfV3l6VZm6mqJEi3CrpLbwe52zaBv44ETnWSDtv1haQXdIaMe/IdQYvWyAmpuOGdCQ3InjyxBUft6kTmSz9Aw63OtyKZwRbTzY3GNZNmQcExa4ykrZUyrgReroth0sdeQ1LiSbO0ar7pkM2Jwqj4EN7Esxc/YHKHJUgJaxs9DSwy6t4/ji1YHV7WvlhBW9bHdX1YE8nqSOQZ2M+E0nqopeND+XgyAYMGBhemRKRzNxbyuwq13TEJrIYn+rhmMB5jyO193mcAypE9KT+jg5v6cYHigJ4AB4gVU3qf9wVWJnwkQvkbsCpilawwWjz/OGDA==