{"id":284133,"date":"2023-07-27T00:21:00","date_gmt":"2023-07-26T22:21:00","guid":{"rendered":"https:\/\/www.borncity.com\/blog\/?p=284133"},"modified":"2023-07-24T10:04:05","modified_gmt":"2023-07-24T08:04:05","slug":"risiko-passwort-reset-unverschlsselte-urls-und-inkrementelle-userids","status":"publish","type":"post","link":"https:\/\/borncity.com\/blog\/2023\/07\/27\/risiko-passwort-reset-unverschlsselte-urls-und-inkrementelle-userids\/","title":{"rendered":"Risiko Passwort-Reset, unverschl&uuml;sselte URLs und inkrementelle UserIDs"},"content":{"rendered":"<p><img decoding=\"async\" title=\"Sicherheit (Pexels, allgemeine Nutzung)\" style=\"float: left; margin: 0px 10px 0px 0px; display: inline\" alt=\"Sicherheit (Pexels, allgemeine Nutzung)\" src=\"https:\/\/borncity.com\/blog\/wp-content\/uploads\/2021\/04\/Sicherheit_klein.jpg\" width=\"200\" align=\"left\"\/>[English]Die Funktion zum Zur\u00fccksetzen eines Anmeldekennworts ist ja bei Online-Konten (und ggf. auch lokalen Konten) weit verbreitet. Ein betroffener Anwender kann sich dann ein neues Anmeldekennwort \u00fcber Formulare generieren und zur erneuten Anmeldung verwenden. Zum Problem wird dies, wenn Anwenderkonten \u00fcber aufsteigende UserIDs intern verwaltet werden. Ein Sicherheitsforscher hat k\u00fcrzlich in einem Fall gezeigt, wie er das Kennwort des Chefs (CEO) \u00fcber diese Funktion zur\u00fccksetzen und so dessen Konto \u00fcbernehmen konnte.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" src=\"https:\/\/vg09.met.vgwort.de\/na\/c19576d224e446f78469b75b7cfc8d71\" width=\"1\" height=\"1\"\/>Bei Online-Konten muss ja der Fall abgefangen werden, dass der Benutzer sich nicht mehr anmelden kann, weil er das Kennwort zur Anmeldung vergessen hat. Also wird ein Link zum Zur\u00fccksetzen des Kennworts auf der Anmeldeseite implementiert. Der Betroffene oder die Betroffene gibt den Benutzernamen in einem Formular ein und bekommt (ggf. nach einer Sicherheitsfrage) ein Einmalkennwort zur Anmeldung per E-Mail geschickt; oder er kann \u00fcber einen \u00fcbermittelten Link das Anmeldekennwort neu setzen. Das kann aber schief gehen, wie nachfolgender Tweet, der auf <a href=\"https:\/\/cristivlad.medium.com\/account-of-the-ceo-takeover-via-password-reset-7e55c0175425\" target=\"_blank\" rel=\"noopener\">diesen Artikel<\/a> verlinkt, zeigt.<\/p>\n<p><a href=\"https:\/\/cristivlad.medium.com\/account-of-the-ceo-takeover-via-password-reset-7e55c0175425\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"Sicherheit beim Passwort Reset\" alt=\"Sicherheit beim Passwort Reset\" src=\"https:\/\/borncity.com\/blog\/wp-content\/uploads\/2023\/07\/image-14.png\"\/><\/a><\/p>\n<p>Bei einem Pentest einer Webanwendung f\u00fcr einen Kunden fand Cristi Vlad eine interessante Falle, die eine Konto\u00fcbernahme erm\u00f6glicht. Die Erkenntnisse hat er aufgeschrieben, um diese mit der Infosec-Community zu teilen.  <\/p>\n<p>Bei solchen Pentests, die mit Authentifizierung zu tun haben, testet er alle damit verbundenen Funktionen ausgiebig. Als er dann bei der Funktion \"Passwort vergessen\" ankam, wollte er den gesamten Ablauf beobachten. Nach Anwahl des betreffenden Links erhielt er eine E-Mail mit einem Link zum Zur\u00fccksetzen des Passworts. Das sah so aus:<\/p>\n<p>*ttps:\/\/email.mail.redactedexample.com\/c\/verylongENCRYPTEDstring<\/p>\n<p>Beim Kunden gab es also keine Verifizierung, die den Passwort-Reset nochmals absicherte. Ob interne Sicherheitsmechanismen existierten, um das Zur\u00fccksetzen von Kennw\u00f6rtern von unbefugten Dritten au\u00dferhalb der Firma zu unterbinden, geht beim \u00dcberfliegen des Beitrags nicht hervor. Ich hatte k\u00fcrzlich im Blog-Beitrag <a href=\"https:\/\/borncity.com\/blog\/2023\/05\/21\/windows-domain-vergessene-kennwrter-selbst-zurcksetzen\/\">Windows Domain: Vergessene Kennw\u00f6rter selbst zur\u00fccksetzen<\/a> die L\u00f6sung eines Blog-Lesers vorgestellt. Dort gibt es einige \u00dcberlegungen zur Absicherung dieses Reset-Prozesses.&nbsp; <\/p>\n<p>Interessanter f\u00fcr den Pentester war aber der weitere Verlauf des Reset-Vorgangs. Denn bei Anwahl des Links wurde er zu einer URL mit folgendem Muster umgeleitet und fand dort das Passwort-Zur\u00fccksetz-Formular:<\/p>\n<p>*ttps:\/\/redactedexample.com\/someendpoint\/confirm.php?u=<strong>551234911<\/strong>&amp;t=<strong>&lt;132bitUnknownHashType&gt;<\/strong>&amp;x=<strong>2913117<\/strong><\/p>\n<p><strong><\/strong>Die Fett hervorgehebenen Parameter in der URL deuten darauf hin, dass da eine UserID zur Identifikation des Kontos verwendet wird. Anhand dieser URL wurde dann im Browser ein Reset-Formular mit folgenden Inhalten angeboten.<\/p>\n<pre>Your email is &lt;myemail&gt;<br \/>Create new password:<br \/>********************<br \/>Confirm password:<br \/>********************<br \/>Submit button<\/pre>\n<p>Wer also die URL zum Passwort-Reset-Formular kannte, konnte dieses Kennwort zur\u00fccksetzen. Als erstes hat der Pentester dann den Parameter hinter dem X in der URL entfernt, um zu sehen, ob das Kennwort-Reset-Formular noch funktioniert &#8211; was es tat. Damit war klar, dass der Parameter u irgendwie der UserID-Wert zur Identifikation des Benutzerkontos war. Er hat&nbsp; dann diese Wert schlicht um 1 erh\u00f6ht und geschaut, was passiert. Er bekam prompt die Kennwort-R\u00fccksetzseite des n\u00e4chsten Benutzerkontos angezeigt, weil die UserIDs aufsteigend vergeben wurden.\n<\/p>\n<p>Mit diesem Schema konnte er sich sofort \u00fcber das Passwort-Reset-Funktion am n\u00e4chsten Konto anmelden. Damit lockte nat\u00fcrlich die Option, das Benutzerkonto des Chefs auf diese Weise zu \u00fcbernehmen. Der Pentester erh\u00f6hte die UserID solange, bis die E-Mail-Adresse des CEO im Formular erschien und konnte auch dessen Passwort zur\u00fccksetzen, um dann das Benutzerkonto zu \u00fcbernehmen.\n<\/p>\n<p>Das Problem war hier, dass die Entwickler die Parameter einmal nicht verschl\u00fcsselt hatten. Zudem waren die BenutzerIDs aufsteigend vergeben worden und es gab keine Sicherungsmechanismen, die Unbefugte davon abhielten, die UserIDs mal schnell auszuprobieren. Ein Angreifer h\u00e4tte mit wenig Aufwand und Kenntnis der R\u00fccksetz-URL die Konten der kompletten Firma auf einen Rutsch \u00fcbernehmen k\u00f6nnen.\n<\/p>\n<p><strong>\u00c4hnliche Artikel:<\/strong><br \/><a href=\"https:\/\/borncity.com\/blog\/2023\/05\/21\/windows-domain-vergessene-kennwrter-selbst-zurcksetzen\/\">Windows Domain: Vergessene Kennw\u00f6rter selbst zur\u00fccksetzen<\/a><br \/><a href=\"https:\/\/borncity.com\/blog\/2014\/09\/12\/windows-admin-kontenkennwort-vergessen-wie-kommt-man-weiter\/\">Windows Admin-Kontenkennwort vergessen: Wie kommt man weiter?<\/a><br \/><a href=\"https:\/\/borncity.com\/blog\/2022\/04\/05\/windows-server-2019-update-kb5011551-blockiert-passwortnderung\/\">Windows Server 2019: Update KB5011551 blockiert Passwort\u00e4nderung<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[English]Die Funktion zum Zur\u00fccksetzen eines Anmeldekennworts ist ja bei Online-Konten (und ggf. auch lokalen Konten) weit verbreitet. Ein betroffener Anwender kann sich dann ein neues Anmeldekennwort \u00fcber Formulare generieren und zur erneuten Anmeldung verwenden. Zum Problem wird dies, wenn Anwenderkonten &hellip; <a href=\"https:\/\/borncity.com\/blog\/2023\/07\/27\/risiko-passwort-reset-unverschlsselte-urls-und-inkrementelle-userids\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[426],"tags":[4328],"class_list":["post-284133","post","type-post","status-publish","format-standard","hentry","category-sicherheit","tag-sicherheit"],"_links":{"self":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/284133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/comments?post=284133"}],"version-history":[{"count":0,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/284133\/revisions"}],"wp:attachment":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/media?parent=284133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/categories?post=284133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/tags?post=284133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}