Gespeichertes XSS

Gespeichertes XSS

Einmal gepflanzt, läuft es danach für jeden Besucher.

Was ist Gespeichertes XSS?

Gespeichertes Cross-Site-Scripting muss nur einmal eingespielt werden. Jeder Benutzer, der die Seite anschließend lädt, führt das Skript des Angreifers in seiner eigenen Sitzung aus, ohne dass ein Link angeklickt und nichts bemerkt werden muss. Sie fügen ein Bild-Tag mit einem onerror -Handler in ein Gästebuch ein, laden die Seite dann selbst und beobachten, wie Ihr Sitzungscookie gedruckt wird. Der Fix entgeht an der Rendering-Grenze, sodass die identische Nutzlast, die sich noch in der Datenbank befindet, als Text gerendert wird. Der gespeicherte Wert muss nie bereinigt werden, damit der Fix erhalten bleibt.

Was Sie lernen in Gespeichertes XSS

Gespeichertes XSS — Trainingsschritte

  1. Das Community-Forum finden

    Heute hat Bob Signal Coast im Visier. Im Community-Forum kann jedes Mitglied eine kurze öffentliche Notiz hinterlassen, die alle anderen Mitglieder lesen. Er meldet sich mit einem Wegwerfkonto an und öffnet das Gästebuch des Forums, um zu sehen, wie es Eingaben verarbeitet.

  2. Notizen werden unverändert gerendert

    Das Gästebuch verspricht etwas, das die meisten Websites sorgfältig vermeiden: Es rendert jede Notiz exakt wie geschrieben, einschließlich HTML. Ein Feld, das jede Eingabe in aktives Markup verwandelt, ist genau das, wonach Bob gesucht hat.

  3. Eine normale Notiz veröffentlichen

    Zunächst verhält sich Bob wie jedes andere Mitglied und veröffentlicht eine gewöhnliche Notiz, um zu sehen, wie das Gästebuch damit umgeht. Die Notiz erscheint genau wie geschrieben an der Pinnwand: Klartext, nichts Ungewöhnliches. Die Funktion arbeitet wie vorgesehen.

  4. Zu einem Skript eskalieren

    Das Feld rendert HTML, daher gibt Bob statt eines Satzes ein Skript ein. Seine Probe ist ein Bild-Tag mit einer nicht ladbaren Quelle und einem onerror -Handler, der das Session-Cookie des Betrachters liest. Das Bild kann nicht geladen werden, der Handler läuft und der Browser zeigt an, was die Notiz vorgibt. Hier gibt er die Sitzung aus – der Beweis, dass eine Notiz Code in der Anmeldung des Betrachters ausführen kann.

  5. Die Ausführung in der Sitzung

    Da ist es: Die Notiz lief eigenständig und zeigte das aktuelle Session-Cookie des Betrachters an, ohne dass ein Link angeklickt oder eine Datei geöffnet wurde. Heute eine harmlose Ausgabe, morgen ein stilles Beacon an Bobs Server. Bob hat bewiesen, dass die Pinnwand alles ausführt, was eine Notiz enthält. Nun baut er die eigentliche Waffe.

  6. Die gefälschte Anmeldung platzieren

    Bob ersetzt die Probe durch eine Notiz, die die Seite in ein Anmeldefeld „Sitzung abgelaufen“ umschreibt. Ein Handler sendet jede Eingabe an seinen eigenen Server. Für jedes Mitglied, das die Pinnwand lädt, sieht es so aus, als fordere das Forum einfach eine erneute Anmeldung an. Die Zugangsdaten gehen direkt an Bob.

  7. Die Falle ist gestellt

    Die gefälschte Anmeldung ist jetzt die neueste Notiz an der Pinnwand und sieht aus, als fordere das Forum seine Mitglieder zur erneuten Anmeldung auf. Ihr Handler sendet jede Eingabe direkt an Bobs Server. Bob hat sie einmal platziert; jedes Mitglied, das ihr vertraut und sich anmeldet, gibt sein Passwort preis.

  8. Alice öffnet die Pinnwand

    Sie verantworten den Render-Code des Gästebuchs. An diesem Morgen informieren Sie sich wie jeder andere Administrator zu Beginn des Tages über die Community: Sie öffnen den Browser und rufen die Pinnwand auf. Sie haben keinen Link angeklickt und nichts ausgeführt. Sie laden lediglich eine Seite, die Sie verwalten.

  9. Beim Laden getroffen

    Die Seite ist kaum geladen, da zeigt ein Popup bereits Ihr Session-Cookie an. Sie haben nichts eingegeben und nichts angeklickt. Eine von Bobs Notizen lief in dem Moment, als die Pinnwand gerendert wurde, innerhalb Ihrer Administrator-Sitzung. In seiner Variante würde derselbe Handler diese Sitzung direkt an ihn senden.

  10. Darunter eine gefälschte Anmeldung

    Scrollen Sie durch die Pinnwand: Dort steht eine zweite platzierte Notiz, ein Anmeldefeld „Sitzung abgelaufen“, das wie ein eigenes Feld des Forums aussieht. Jedes Mitglied, das ihm vertraut und sich anmeldet, gibt sein Passwort an den Angreifer weiter. Dies sind gespeicherte Notizen, die im Browser jedes Betrachters ausgeführt werden. Als zuständige Ingenieurin wissen Sie, dass die Behebung im Render-Code liegt.

Abdeckung der Sicherheits-Frameworks

OWASP Top 10

  • A05:2025 Injection
  • A03:2021 Injection

CWE

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

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security