Übergabe von E-Mails als PDF mit eingebetteten Anlagen

This commit is contained in:
2026-09-07 22:33:55 +02:00
parent fd87813cbe
commit d032e3b19c
16 changed files with 1363 additions and 28 deletions

View File

@@ -1,7 +1,7 @@
# Sicherheitsbetrachtung
Was die Erweiterung tut, welche Angriffswege sich daraus ergeben und was
dagegen unternommen wird. Stand: Version 1.5.0.
dagegen unternommen wird. Stand: Version 1.11.3.
---
@@ -10,7 +10,11 @@ dagegen unternommen wird. Stand: Version 1.5.0.
Die Lage ist deutlich entspannter als bei der LibreOffice-Fassung. Dort
war der kritischste Schritt das **Öffnen** eines heruntergeladenen
Dokuments in einer Anwendung mit Makrofähigkeit. Das entfällt hier
vollständig — die Erweiterung öffnet nichts, sie überträgt nur.
vollständig — die Erweiterung öffnet nichts.
Seit Version 1.9 erzeugt sie allerdings PDF-Dateien aus E-Mails. Das ist
sicherheitstechnisch unauffällig, gehört aber der Vollständigkeit halber
in diese Aufstellung — siehe Abschnitt 5.
| Handlung | Vertrauensgrenze |
|---|---|
@@ -18,6 +22,7 @@ vollständig — die Erweiterung öffnet nichts, sie überträgt nur.
| Anhänge und Nachrichten hochladen | Inhalt vom Absender, nicht vertrauenswürdig |
| Dokumente als Anhang in Entwürfe | Inhalt aus dem Archiv |
| Freigabelink in den Nachrichtentext | erzeugte Zeichenkette |
| PDF aus einer Nachricht erzeugen | Inhalt vom Absender |
| Token dauerhaft speichern | Geheimnis |
---
@@ -30,7 +35,8 @@ Bewusst knapp gehalten:
|---|---|---|
| `storage` | Einstellungen | |
| `menus` | Kontextmenüs | |
| `messagesRead` | Anhänge und `.eml` lesen | nur auf Anforderung genutzt |
| `messagesRead` | Anhänge, Text und `.eml` lesen | nur auf Anforderung genutzt |
| `accountsRead` | Konto der Nachricht ermitteln | ohne sie greift der Weg über die Zustellkopfzeilen |
| `compose` | Anhang und Link einfügen | |
| `notifications` | Fehlermeldungen | |
@@ -101,7 +107,38 @@ Speicher liegen, nur weil jemand einen Dialog offen stehen liess.
---
## 5. Speicherverhalten
## 5. Das erzeugte PDF
Seit Version 1.9 werden ganze Nachrichten als PDF aufbereitet. Der
Erzeuger ist selbst geschrieben (`lib/pdf.js`), ohne Fremdbibliothek.
**Das PDF enthält keinen ausführbaren Inhalt.** Kein JavaScript, keine
OpenAction, keine Verweise nach außen — nur Textoperatoren, ein
Rechteck und eingebettete Dateien. Ein PDF-Betrachter hat darin nichts
zu tun, was über das Darstellen hinausgeht.
**Eingebettet werden Originalnachricht und Anhänge.** Deren Inhalt
stammt vom Absender und ist nicht vertrauenswürdig. Die Erweiterung
öffnet sie nicht, sie legt sie nur ab — was ein Betrachter tut, wenn
jemand später auf einen Anhang doppelklickt, liegt außerhalb ihres
Einflusses. Das entspricht der Lage bei jedem anderen Archivdokument.
**Dateinamen werden bereinigt**, bevor sie in die Anhangstabelle des PDF
geschrieben werden. Sie stammen vom Absender.
**Texte werden für die PDF-Syntax abgesichert.** Klammern und
Rückstriche haben dort besondere Bedeutung; ohne Maskierung könnte ein
Betreff mit einer schliessenden Klammer die Struktur der Datei stören.
Zeichen ausserhalb von WinAnsi werden durch ein Fragezeichen ersetzt.
**Ränder und Schriftgröße werden begrenzt** — 0 bis 60 mm, 7 bis 16
Punkt, und zusätzlich auf höchstens ein Drittel der Seitenbreite. Eine
Zahl aus einem Eingabefeld kann alles sein, und ein Dokument mit
negativer Textbreite wäre schwer zu deuten.
---
## 6. Speicherverhalten
Anhangdaten werden **erst beim Hochladen** geladen, nicht beim Öffnen des
Dialogs. Bei einer Nachricht mit mehreren großen Anhängen läge sonst alles
@@ -109,7 +146,7 @@ im Speicher, während der Anwender noch überlegt.
---
## 6. Transport
## 7. Transport
**Adressprüfung.** Nur `http` und `https`. Ohne diese Prüfung liessen sich
andere Schemata hinterlegen, die `fetch` teilweise bedient.
@@ -125,7 +162,7 @@ ohnehin nicht umgehen, und das ist richtig so.
---
## 7. Der Token
## 8. Der Token
Er liegt im Klartext in `browser.storage.local`, also im Profil von
Thunderbird. Das entspricht dem, was Erweiterungen üblicherweise tun, ist
@@ -145,11 +182,12 @@ Erweiterung kann dann nur, was dieser Benutzer darf.
---
## 8. Was die Erweiterung NICHT tut
## 9. Was die Erweiterung NICHT tut
- kein `eval`, kein `innerHTML` mit fremden Inhalten — alle Listen werden
über `textContent` und `createElement` aufgebaut
- kein Öffnen heruntergeladener Dateien
- kein ausführbarer Inhalt im erzeugten PDF
- kein Schreiben ins Dateisystem
- kein Versenden von Nachrichten
- keine Übertragung an Dritte; einzige Gegenstelle ist die konfigurierte
@@ -157,7 +195,7 @@ Erweiterung kann dann nur, was dieser Benutzer darf.
---
## 9. Bekannte Grenzen
## 10. Bekannte Grenzen
| Punkt | Bewertung |
|---|---|
@@ -166,6 +204,7 @@ Erweiterung kann dann nur, was dieser Benutzer darf.
| Kompromittierte Paperless-Instanz | könnte manipulierte Dokumente als Anhang liefern — sie werden aber nicht geöffnet, nur angehängt |
| Kein Schutz gegen Zugriff auf das eigene Benutzerkonto | systembedingt |
| Der Nachrichtentext wird beim Einfügen vollständig neu geschrieben | Vorgabe der Compose-Schnittstelle, siehe README |
| Das erzeugte PDF ist **kein PDF/A** | dafür fehlen Schrifteinbettung, Farbprofil und eine Prüfung mit veraPDF |
---