[x] 2.1 - mandatory: Massenmailversand: Über die "Passwort vergessen?"-Funktion ist der massenhafte Versand von
E-Mails möglich. Hierfür benötigt man nur einen gültigen Benutzernamen, der unauthentifiziert über
https://sddi-katalog.bayern/user/ ermittelt werden kann (siehe Schwachstelle L4). So war es möglich
50 Mails innerhalb weniger Sekunden zu generieren.
Needs more research
Is this resolved/will be accepted, if L4 is solved?
Is the feature described here an acceptable solution?
When users try to reset a password for an email address, CKAN will no longer disclose whether or not that email address exists in the DB.
it should be possible to set how many emails can be sent per minute in CKAN. In official CKAN Documentation (here and here) it is possible to find how to set a limit on the number of emails that can be sent. But it is necessary to check how to limit e-mails for specific request.
@MarijaKnezevic Are you sure about this? I doubt that the password reset eMails are subject of the activity stream options. Can you test this?
[x] 2.2 - mandatory: Veraltete Software mit bekannten Schwachstellen: @MarijaKnezevic bitte alle Dependencies aktualisieren
jQuery: Auf Seiten mit Datensatz-Verknüpfungen – etwa /dataset/relationship/pentest-1 – wird jQuery in Version 2.0.3
von der URL https://code.jquery.com/jquery-2.0.3.min.js eingebunden.
dagre.js:
cytoscape.js:
[x] 2.3 - mandatory: Fehlender Virenscan bei Dateiupload: Es war möglich eine Testvirus-Datei in die Webanwendung
hochzuladen. Dies deutet darauf hin, dass der in der Richtlinie BayITSiR-14 geforderte Virenscan
beim Upload von Dateien nicht implementiert ist.
Needs more research.
Currently, no simple solution found.
Can this maybe be resolved through some kind of policy, e.g. tutorial/guidelines for all people that may upload files on how to virus scan them up front?
This is probably the most critical issue. It will require significant implementation work, possibly additional maintenance...
Is it sufficient/acceptable, to disallow e.g. executable files for upload? See this feature.
This has been tested by @BWibo: This generally works, but only for VERY small files (<< 1Mb). Otherwise, there are timeouts. This needs further testing. Currently, this is not a useable solutions. Timeout are not catched, the user would face an error message.
[x] 2.4 - mandatory: User Enumeration: Unter https://sddi-katalog.bayern/user/ kann unauthentifizert eine Liste
aller existierender Benutzer abgerufen werden. Diese beinhaltet auch administrative Accounts.
[x] 2.5 - mandatory: Schwache Kennwortrichtlinie: Die derzeit aktive Kennwortrichtlinie fordert lediglich eine
Mindestlänge von 8 Zeichen. So sind zum Beispiel triviale Passwörter wie "12345678" möglich. Hier
sollten mindestens noch weitere Zeichengruppen (Groß- und Kleinbuchstaben oder Sonderzeichen) durch
die Kennwortrichtlinie gefordert werden.
This extension is probably not sufficient, as it only allows to force a password length. ckanext-fortify
[x] 2.6 - mandatory: Brute Force auf Login möglich: Die Anwendung hat keine Schutzmaßnahmen gegen
Brute-Force-Angriffe auf die Login-Funktion. Es wurden innerhalb weniger Sekunden 50 Anmeldeversuche
mit falschem Passwort durchgeführt. Danach war der Login mit korrektem Kenntwort möglich. Zur
Behebung der Schwachstelle sollten weitere Loginversuche nach einem fehlgeschlagenen Anmeldeversuch
erst mit immer weiter steigender Verzögerung möglich sein.
[x] 2.7 - mandatory: Cross-Site-Scripting: Bei den Datensätzen ist das Formularfeld "Beschreibung" und bei den Organisationen das Feld "Name" anfällig für Cross-Site-Scripting. In beiden Fällen wurde die Payload <script>alert("XSS");</script> eingefügt und der hinterlegte Javascript-Code anschließend ausgeführt. Beim Namensfeld einer Organisation erfolgt die Ausführung jedoch nur auf der Hauptseite in der Liste der Organisationen. Auf der Detailseite der Organisation wurden die Eingaben korrekt behandelt und es kam nicht zu einer Ausführung.
How is sanitizing of user input fields handed in CKAN in general? Are there tools/practices in place that take care of this?
Is this coming from our own implementation, e.g. in tum-gis/ckanext-grouphierarchy-sddi? If yes, what do we do different with here compared to other user input fields?
@MarijaKnezevic, @TomeCirun: Please check if user input in the name field for Organizations and the description field of Datasets is properly sanitized regarding XSS vulnerabilities. Please check if example code like this <script>alert("XSS");</script> is executable through user input, or not. This affects all extension that we maintain, that parse user input in some way.
Is this an upstream issue?
Are there other user inputs that could be affected?
Cross-Site-Scripting is solved in CKAN 2.10.1. The documentation about Cross-Site Request Forgery (CSRF) in the extension best practices is possible to find here
[x] 2.8 - informative: Browser password storage is allowed
ToDos, questions, notes
ckanext-security
Alternative approaches
ckanext-security
. This requires integration of an auth standard like OAUTH2/SAML/LDAPExisting extensions
Overview issues PenTest
[x] 2.1 - mandatory: Massenmailversand: Über die "Passwort vergessen?"-Funktion ist der massenhafte Versand von E-Mails möglich. Hierfür benötigt man nur einen gültigen Benutzernamen, der unauthentifiziert über https://sddi-katalog.bayern/user/ ermittelt werden kann (siehe Schwachstelle L4). So war es möglich 50 Mails innerhalb weniger Sekunden zu generieren.
[x] 2.2 - mandatory: Veraltete Software mit bekannten Schwachstellen: @MarijaKnezevic bitte alle Dependencies aktualisieren
moments.js
: Die Webanwendung setzt unter https://sddi-katalog.bayern/webassets/webassets-external/76307a4b018a3e05af9d08e07dcf9176_moment.js vermutlich die Version 2.1.0 der Bibliothek moment.js ein. Für diese existieren bekannte Schwachstellen: https://security.snyk.io/package/npm/moment/2.1.0 Ob die Anwendung tatsächlich für die genannten Schwachstellen anfällig ist konnte im gegebenen Zeitrahmen und im Blackbox-Verfahren nicht ermittelt werden.jQuery
: Auf Seiten mit Datensatz-Verknüpfungen – etwa /dataset/relationship/pentest-1 – wird jQuery in Version 2.0.3 von der URL https://code.jquery.com/jquery-2.0.3.min.js eingebunden.dagre.js
:cytoscape.js
:[x] 2.3 - mandatory: Fehlender Virenscan bei Dateiupload: Es war möglich eine Testvirus-Datei in die Webanwendung hochzuladen. Dies deutet darauf hin, dass der in der Richtlinie BayITSiR-14 geforderte Virenscan beim Upload von Dateien nicht implementiert ist.
ckanext-security
[x] 2.4 - mandatory: User Enumeration: Unter https://sddi-katalog.bayern/user/ kann unauthentifizert eine Liste aller existierender Benutzer abgerufen werden. Diese beinhaltet auch administrative Accounts.
ckan.auth.public_user_details = False
.[x] 2.5 - mandatory: Schwache Kennwortrichtlinie: Die derzeit aktive Kennwortrichtlinie fordert lediglich eine Mindestlänge von 8 Zeichen. So sind zum Beispiel triviale Passwörter wie "12345678" möglich. Hier sollten mindestens noch weitere Zeichengruppen (Groß- und Kleinbuchstaben oder Sonderzeichen) durch die Kennwortrichtlinie gefordert werden.
ckanext-security
works.[x] 2.6 - mandatory: Brute Force auf Login möglich: Die Anwendung hat keine Schutzmaßnahmen gegen Brute-Force-Angriffe auf die Login-Funktion. Es wurden innerhalb weniger Sekunden 50 Anmeldeversuche mit falschem Passwort durchgeführt. Danach war der Login mit korrektem Kenntwort möglich. Zur Behebung der Schwachstelle sollten weitere Loginversuche nach einem fehlgeschlagenen Anmeldeversuch erst mit immer weiter steigender Verzögerung möglich sein.
ckanext-security
works.[x] 2.7 - mandatory: Cross-Site-Scripting: Bei den Datensätzen ist das Formularfeld "Beschreibung" und bei den Organisationen das Feld "Name" anfällig für Cross-Site-Scripting. In beiden Fällen wurde die Payload
<script>alert("XSS");</script>
eingefügt und der hinterlegte Javascript-Code anschließend ausgeführt. Beim Namensfeld einer Organisation erfolgt die Ausführung jedoch nur auf der Hauptseite in der Liste der Organisationen. Auf der Detailseite der Organisation wurden die Eingaben korrekt behandelt und es kam nicht zu einer Ausführung.name
field for Organizations and thedescription
field of Datasets is properly sanitized regarding XSS vulnerabilities. Please check if example code like this<script>alert("XSS");</script>
is executable through user input, or not. This affects all extension that we maintain, that parse user input in some way.[x] 2.8 - informative: Browser password storage is allowed
[x] 2.9 - recommended: Unsafe cookie configuration
[x] 2.10 - urgent: Missing headers
[x] 2.11 - urgent: No session timeout
who.timeout = 3600
https://docs.ckan.org/en/2.9/maintaining/configuration.html#who-timeoutauth_tkt
cookie[x] 2.12 - recommended: Javascript from external sources