Commit 45daae50 authored by robinc's avatar robinc
Browse files

Fixed md formatting

parent 958d2d49
......@@ -7,7 +7,7 @@
Nachrichten sehen so aus:
```
```json
{
"body": "hello world",
"msgtype": "m.text"
......@@ -32,15 +32,16 @@ PRIVMSG #room :hello world
* Erstellt Puppen für Matrix und IRC Nutzer auf dem jeweils anderen Server
* Leitet Nachrichten weiter
\--> BRIDGE DEMO
[Zwei Fenster; Einen IRC client, einen Matrix client (Element); Ein gebridgeter Raum, drei Nutzer, Alice (Matrix-Nutzer), Bob (IRC-Nutzer) und Mallory; Nachrichten werden in beide Richtungen zwischen Alice und Bob geschickt; Das Publikum sieht, wie die Nachrichten zu dem jeweils anderen Dienst von den Bridge-Puppets weitergeleitet werden; Insbesondere wird darauf hingewiesen, wie eine mehrzeilige Matrix-Nachricht korrekt getrennt und an den IRC-Server weitergeleitet wird.]
## BRIDGE DEMO
*Zwei Fenster; Einen IRC client, einen Matrix client (Element); Ein gebridgeter Raum, drei Nutzer, Alice (Matrix-Nutzer), Bob (IRC-Nutzer) und Mallory; Nachrichten werden in beide Richtungen zwischen Alice und Bob geschickt; Das Publikum sieht, wie die Nachrichten zu dem jeweils anderen Dienst von den Bridge-Puppets weitergeleitet werden; Insbesondere wird darauf hingewiesen, wie eine mehrzeilige Matrix-Nachricht korrekt getrennt und an den IRC-Server weitergeleitet wird.*
# Zeilenumbrüche
* Matrix Nachrichten können Zeilenumbrüche enthalten, IRC Nachrichten nicht
* Matrix Nachrichten werden von der Brücke an Zeilenumbrüchen getrennt und als separate IRC Nachrichten gesendet
```
```ts
private _splitMessage(target: string, text: string): string[] {
const maxLength = Math.min(this.maxLineLength - target.length, this.opt.messageSplit);
if (!text) {
......@@ -65,14 +66,15 @@ PRIVMSG #room :hello world
}
```
* Nachrichten werden nur bei den üblichen Zeilenumbrüchen \\n und \\r\\n geteilt
* Für manche IRC-Server ist \\r aber auch ein gültiger Zeilenumbruch
* Kommt ein \\r Zeilenumbruch in einer Matrix Nachricht vor, wird der darauffolgende Text als IRC Command interpretiert
* Nachrichten werden nur bei den üblichen Zeilenumbrüchen LF (`\n`) und CRLF (`\r\n`) geteilt
* Für manche IRC-Server ist CR (`\r`) aber auch ein gültiger Zeilenumbruch
* Kommt ein `\r` Zeilenumbruch in einer Matrix Nachricht vor, wird der darauffolgende Text als IRC Command interpretiert
\--> EINFACHE EXPLOIT DEMO
[Aufbau wie zuvor, es kommt eine Terminal zum Ausführen von curl-Befehlen hinzu; Mit curl wird eine bösartige Nachricht von Mallory zu Alice direkt an den Matrix-Server geschickt; Alice antwortet in Element auf die Nachricht; Das Publikum sieht, wie die Nachricht vollständig in Element angezeigt wird; Im IRC-Client ist jedoch zu beobachten, dass lediglich der erste Teil der Nachricht im Raum angezeigt wird; Der zweite Teil wird als Befehl interpretiert und ausgeführt]
## EINFACHE EXPLOIT DEMO
```
*Aufbau wie zuvor, es kommt eine Terminal zum Ausführen von curl-Befehlen hinzu; Mit curl wird eine bösartige Nachricht von Mallory zu Alice direkt an den Matrix-Server geschickt; Alice antwortet in Element auf die Nachricht; Das Publikum sieht, wie die Nachricht vollständig in Element angezeigt wird; Im IRC-Client ist jedoch zu beobachten, dass lediglich der erste Teil der Nachricht im Raum angezeigt wird; Der zweite Teil wird als Befehl interpretiert und ausgeführt*
```json
{
"body": "hello world\rPRIVMSG bob :i got pwned",
"msgtype": "m.text"
......@@ -85,7 +87,7 @@ PRIVMSG #room :hello world
* Matrix unterstützt HTML Nachrichten
* Diese enthalten eine Plaintext Version der Nachricht
```
```json
{
"body": "**fetter Text**",
"msgtype": "m.text",
......@@ -96,15 +98,14 @@ PRIVMSG #room :hello world
* Element (Matrix Client) zeigt HTML Version an
* Brücke benutzt Plaintext Version
\-> Exploit lässt sich in Plaintext Version verstecken
* Exploit lässt sich in Plaintext Version verstecken
* Unsichtbar für Matrix und IRC Nutzer
\--> EXPLOIT DEMO
[Aufbau wie zuvor, aber geschicktere JSON Nachricht; Das Publikum beobachtet, dass nun der Befehl wie zuvor ausgeführt wird, Alice aber keine Vorwarnung in Element sieht]
## EXPLOIT DEMO
```
*Aufbau wie zuvor, aber geschicktere JSON Nachricht; Das Publikum beobachtet, dass nun der Befehl wie zuvor ausgeführt wird, Alice aber keine Vorwarnung in Element sieht*
```json
{
"body": "hello world\rPRIVMSG #target :i got pwned",
"msgtype": "m.text",
......@@ -120,7 +121,7 @@ PRIVMSG #room :hello world
* Bot zum Registrieren von Nicknames
* PASSWORD SET password
```
```json
{
"body": "hello world\rPRIVMSG NickServ :PASSWORD SET hunter2",
"msgtype": "m.text",
......@@ -132,13 +133,15 @@ PRIVMSG #room :hello world
## Weitere Commands
* IRC Operator sind hochwertigere Ziele
* Erstellt ein Matrix-Nutzer einen Raum, so ist die Bridge der Channel Operator
* Erstellt ein Matrix-Nutzer einen Raum, so ist aber die Bridge der Channel Operator
* Server Ops antworten (wenn überhaupt) auch nicht mit Matrix
* Dementsprechend sind die mächtigsten Befehle (DIE, KILL, etc.) nicht auszunutzen
## Social Engineering
* Social Engineering mit PRIVMSG und NickServ können aber je nach Thema des Channels trotzdem viel Schaden anrichten (bspw. Entwickler nutzen IRC zur internen Kommunikation und Community-Support; Rechte für einen neuen Entwickler werden im Namen eines vertrauenswürdigen Nutzers von dem Admin angefragt)
* Social Engineering mit PRIVMSG und NickServ können aber je nach Thema des Channels trotzdem viel Schaden anrichten
* bspw. Entwickler nutzen IRC zur internen Kommunikation und Community-Support
* Rechte für einen neuen Entwickler werden im Namen eines vertrauenswürdigen Nutzers von dem Admin angefragt
# Wer ist Schuld?
......@@ -190,7 +193,7 @@ Es wird deutlich, dass Spezifikation und Realität nicht das selbe sind.
Die Spezifikation hat mehr zu sagen:
> RFC1459 2.3.1 Message format in 'pseudo' BNF
> **RFC1459 2.3.1 Message format in 'pseudo' BNF**
>
> The protocol messages must be extracted from the contiguous stream of
> octets. The current solution is to designate two characters, CR and
......@@ -204,7 +207,7 @@ Die Spezifikation hat mehr zu sagen:
>
> The BNF representation for this is:
>
>
> ```
> <message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
> <prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]
> <command> ::= <letter> { <letter> } | <number> <number> <number>
......@@ -217,6 +220,7 @@ Die Spezifikation hat mehr zu sagen:
> NUL or CR or LF>
>
> <crlf> ::= CR LF
>```
"The **current solution** is to designate **two** characters, CR **and** LF, as message seperators". Das könnte man so interpretieren, dass CR, LF und CR-LF allesamt zulässige Teiler sind. Die BNF sagt aber nicht nur das ausschließlich CR-LF ein Terminierungszeichen ist, sondern verbietet sogar ein anderweitiges Vorkommen von CR oder LF. Demnach weißt nur der dritte Server ein korrektes Verhalten auf.
......@@ -227,7 +231,7 @@ Die Spezifikation hat mehr zu sagen:
<!---
# Weitere Themen
* IRC schlecht spezifiziert?
......@@ -236,3 +240,4 @@ Die Spezifikation hat mehr zu sagen:
* node-irc geschichte
* weitere dependents von node-irc
* wysinwyg
--->
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment