
Coder Conquer Security OWASP Top 10 API-Serie — Autorisierung auf unterbrochener Objektebene
Bedrohungen der Cybersicherheit sind heutzutage allgegenwärtig und unerbittlich. Es ist so schlimm geworden, dass es fast unmöglich geworden ist, nach der Bereitstellung von Programmen mit ihnen Schritt zu halten. Im Zeitalter von DevSecOps, kontinuierlicher Bereitstellung und mehr Daten als je zuvor helfen kluge Unternehmen ihren Entwicklern jedoch dabei, sich zu sicherheitsbewussten Superstars weiterzubilden, die dabei helfen, häufig auftretende Sicherheitslücken zu beseitigen, bevor sie überhaupt in die Produktion gelangen. Wir haben uns damit befasst Sicherheitslücken im Internet, plus unser eigenes Die 8 wichtigsten Infrastrukturen als Code Bugs, und jetzt ist es an der Zeit, sich mit der nächsten großen Softwaresicherheitsherausforderung vertraut zu machen. Bist du bereit?
Diese nächste Blogserie wird sich auf einige der schlimmsten Sicherheitslücken konzentrieren, die sich auf Anwendungsprogrammierschnittstellen (APIs) beziehen. Diese sind so schlimm, dass sie das Open Web Application Security Project ins Leben gerufen haben (WESPE) Liste der wichtigsten API-Schwachstellen. Angesichts der Bedeutung von APIs für moderne Computerinfrastrukturen handelt es sich um kritische Probleme, die Sie um jeden Preis von Ihren Anwendungen und Programmen fernhalten müssen.
Ein perfektes Beispiel dafür, warum es wichtig ist, Code zur Durchsetzung der Sicherheit zu verwenden, findet sich in einer Untersuchung der Sicherheitsanfälligkeit für eine fehlerhafte Autorisierung auf Objektebene. Dies passiert, wenn Programmierer nicht explizit definieren, welche Benutzer Objekte und Daten anzeigen können, oder wenn sie irgendeine Form der Überprüfung vornehmen, um Objekte anzusehen, zu ändern oder andere Anfragen zu stellen, um sie zu manipulieren oder auf Objekte zuzugreifen, sodass sie Objekte und Daten über API-Endpunkte ändern und darauf zugreifen können. Ein API-Endpunkt ist ein Kontaktpunkt, oft eine URL, der für die Kommunikation zwischen der API selbst und einem anderen System verwendet wird. Die Fähigkeit zur Konnektivität zwischen Apps hat einige der beliebtesten Softwareprogramme der Welt verbessert, aber es besteht das Risiko, dass mehrere Endpunkte offengelegt werden, wenn sie nicht luftdicht sind.
Es kann auch vorkommen, dass Programmierer Eigenschaften von übergeordneten Klassen vergessen oder erben, ohne zu wissen, dass dadurch auch ein kritischer Überprüfungsprozess in ihrem Code ausgelassen wird. Im Allgemeinen sollten Autorisierungsprüfungen auf Objektebene für jede Funktion vorgesehen werden, die mithilfe einer Benutzereingabe auf eine Datenquelle zugreift.
Denken Sie, Sie kennen sich bereits mit diesen aus und können einen Fehler in der Zugriffskontrolle sofort finden, beheben und beheben? Spiele die spielerische Herausforderung:
Wie ist es dir ergangen? Wenn du an deinem Ergebnis arbeiten willst, lies weiter!
Was sind einige Beispiele für Sicherheitslücken bei der Autorisierung auf Objektebene?
Sicherheitslücken bei der Zugriffskontrolle auf Objektebene ermöglichen es Angreifern, Maßnahmen zu ergreifen, zu denen sie nicht zugelassen werden sollten. Dabei kann es sich um eine Aktion handeln, die Administratoren vorbehalten sein sollte, wie etwa der Zugriff auf oder das Anzeigen vertraulicher Daten oder das Löschen von Datensätzen. In einer hochsicheren Umgebung kann dies sogar bedeuten, dass niemand die Aufzeichnungen überhaupt einsehen kann, sofern er nicht ausdrücklich dazu autorisiert ist.
Bei der Definition der Autorisierung auf Objektebene sollten Sie alle möglichen Aktionen berücksichtigen. In der Java Spring API könnte ein Endpunkt mit einem potenziellen Problem beispielsweise so aussehen:
public boolean deleteOrder (Lange ID) {
Bestellung = OrderRepository.getOne (id);
wenn (Reihenfolge == null) {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
}
Benutzerbenutzer = order.getUser ();
OrderRepository.delete (Bestellung);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
Der API-Endpunkt löscht Bestellungen anhand der ID, überprüft jedoch nicht, ob diese Bestellung vom aktuell angemeldeten Benutzer getätigt wurde. Dies bietet einem Angreifer die Möglichkeit, diese Lücke auszunutzen und die Bestellungen anderer Benutzer zu löschen.
Damit sichere Zugriffsbeschränkungen ordnungsgemäß implementiert werden können, würde der Code eher so aussehen:
public boolean deleteOrder (Lange ID) {
Benutzerbenutzer = UserService.getUserByContext ();
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
wenn (OrderExist) {
orderrepository.deleteById (id);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
} sonst {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
Beseitigung von Sicherheitslücken bei der Autorisierung auf Objektebene
Der Zugriffskontrollcode muss nicht übermäßig kompliziert sein. Im Fall unseres Beispiels für eine Java-Spring-API-Umgebung kann dies behoben werden, indem genau definiert wird, wer auf Objekte zugreifen kann.
Zunächst muss ein Überprüfungsprozess implementiert werden, um festzustellen, wer die Anfrage stellt:
Benutzerbenutzer = UserService.getUserByContext ();
Als Nächstes müssen wir sicherstellen, dass die Objekt-ID existiert und dem Benutzer gehört, der die Anfrage stellt:
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
Und schließlich löschen wir das Objekt:
orderrepository.deleteById (id);
Denken Sie daran, dass Sie sicherstellen müssen, dass die Autorisierungsmethode in Ihrem Code den Benutzerrichtlinien und Datenzugriffskontrollen Ihres Unternehmens entspricht. Um sicherzustellen, dass Ihr Code vollständig sicher ist, sollten Sie Prüfungen durchführen, um sicherzustellen, dass Benutzer mit unterschiedlichen Berechtigungsstufen Zugriff auf die Daten haben, die sie für ihre Arbeit benötigen, aber daran gehindert werden, Inhalte einzusehen oder zu ändern, die auf sie beschränkt sein sollten. Dadurch könnten Sicherheitslücken bei der Steuerung fehlender Objekte aufgedeckt werden, die versehentlich übersehen wurden.
Die wichtigsten Erkenntnisse aus diesen Beispielen bestehen darin, zunächst jede Aktion zu definieren, die ein Benutzer mit einem Objekt ausführen könnte, und dann dem Code direkt starke Zugriffskontrollen hinzuzufügen. Und schließlich sollten Sie niemals darauf vertrauen, dass die vererbten übergeordneten Eigenschaften diese Aufgabe erledigen oder diese Autorität an eine andere Stelle delegieren. Definieren Sie stattdessen Benutzerberechtigungen und Aktionen im Code explizit für jeden Objekttyp, den Sie schützen müssen.
Schauen Sie sich das an Sicherer Codekrieger Blogseiten mit weiteren Informationen zu dieser Sicherheitslücke und dazu, wie Sie Ihr Unternehmen und Ihre Kunden vor den Folgen anderer Sicherheitslücken schützen können. Sie können auch probiere eine Demo der Secure Code Warrior-Schulungsplattform, um all Ihre Cybersicherheitsfähigkeiten zu verbessern und auf dem neuesten Stand zu halten.


Im Allgemeinen sollten Autorisierungsprüfungen auf Objektebene für jede Funktion enthalten sein, die mithilfe einer Benutzereingabe auf eine Datenquelle zugreift. Andernfalls besteht ein großes Risiko.
Matias Madou est expert en sécurité, chercheur, directeur technique et cofondateur de Secure Code Warrior. Matias a obtenu son doctorat en sécurité des applications à l'université de Gand, en se concentrant sur les solutions d'analyse statique. Il a ensuite rejoint Fortify aux États-Unis, où il s'est rendu compte qu'il ne suffisait pas de détecter les problèmes de code sans aider les développeurs à écrire du code sécurisé. C'est ce qui l'a incité à développer des produits qui aident les développeurs, allègent le fardeau de la sécurité et dépassent les attentes des clients. Lorsqu'il n'est pas à son bureau en tant que membre de l'équipe Awesome, il aime être sur scène pour présenter des conférences, notamment RSA Conference, BlackHat et DefCon.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationMatias Madou est expert en sécurité, chercheur, directeur technique et cofondateur de Secure Code Warrior. Matias a obtenu son doctorat en sécurité des applications à l'université de Gand, en se concentrant sur les solutions d'analyse statique. Il a ensuite rejoint Fortify aux États-Unis, où il s'est rendu compte qu'il ne suffisait pas de détecter les problèmes de code sans aider les développeurs à écrire du code sécurisé. C'est ce qui l'a incité à développer des produits qui aident les développeurs, allègent le fardeau de la sécurité et dépassent les attentes des clients. Lorsqu'il n'est pas à son bureau en tant que membre de l'équipe Awesome, il aime être sur scène pour présenter des conférences, notamment RSA Conference, BlackHat et DefCon.
Matias est un chercheur et un développeur qui possède plus de 15 ans d'expérience pratique dans le domaine de la sécurité des logiciels. Il a développé des solutions pour des entreprises telles que Fortify Software et sa propre entreprise Sensei Security. Au cours de sa carrière, Matias a dirigé de nombreux projets de recherche sur la sécurité des applications qui ont débouché sur des produits commerciaux et peut se targuer d'avoir déposé plus de 10 brevets. Lorsqu'il n'est pas à son bureau, Matias a été instructeur pour des formations avancées en matière de sécurité des applications ( courses ) et intervient régulièrement lors de conférences mondiales telles que RSA Conference, Black Hat, DefCon, BSIMM, OWASP AppSec et BruCon.
Matias est titulaire d'un doctorat en ingénierie informatique de l'Université de Gand, où il a étudié la sécurité des applications par le biais de l'obscurcissement des programmes afin de dissimuler le fonctionnement interne d'une application.


Bedrohungen der Cybersicherheit sind heutzutage allgegenwärtig und unerbittlich. Es ist so schlimm geworden, dass es fast unmöglich geworden ist, nach der Bereitstellung von Programmen mit ihnen Schritt zu halten. Im Zeitalter von DevSecOps, kontinuierlicher Bereitstellung und mehr Daten als je zuvor helfen kluge Unternehmen ihren Entwicklern jedoch dabei, sich zu sicherheitsbewussten Superstars weiterzubilden, die dabei helfen, häufig auftretende Sicherheitslücken zu beseitigen, bevor sie überhaupt in die Produktion gelangen. Wir haben uns damit befasst Sicherheitslücken im Internet, plus unser eigenes Die 8 wichtigsten Infrastrukturen als Code Bugs, und jetzt ist es an der Zeit, sich mit der nächsten großen Softwaresicherheitsherausforderung vertraut zu machen. Bist du bereit?
Diese nächste Blogserie wird sich auf einige der schlimmsten Sicherheitslücken konzentrieren, die sich auf Anwendungsprogrammierschnittstellen (APIs) beziehen. Diese sind so schlimm, dass sie das Open Web Application Security Project ins Leben gerufen haben (WESPE) Liste der wichtigsten API-Schwachstellen. Angesichts der Bedeutung von APIs für moderne Computerinfrastrukturen handelt es sich um kritische Probleme, die Sie um jeden Preis von Ihren Anwendungen und Programmen fernhalten müssen.
Ein perfektes Beispiel dafür, warum es wichtig ist, Code zur Durchsetzung der Sicherheit zu verwenden, findet sich in einer Untersuchung der Sicherheitsanfälligkeit für eine fehlerhafte Autorisierung auf Objektebene. Dies passiert, wenn Programmierer nicht explizit definieren, welche Benutzer Objekte und Daten anzeigen können, oder wenn sie irgendeine Form der Überprüfung vornehmen, um Objekte anzusehen, zu ändern oder andere Anfragen zu stellen, um sie zu manipulieren oder auf Objekte zuzugreifen, sodass sie Objekte und Daten über API-Endpunkte ändern und darauf zugreifen können. Ein API-Endpunkt ist ein Kontaktpunkt, oft eine URL, der für die Kommunikation zwischen der API selbst und einem anderen System verwendet wird. Die Fähigkeit zur Konnektivität zwischen Apps hat einige der beliebtesten Softwareprogramme der Welt verbessert, aber es besteht das Risiko, dass mehrere Endpunkte offengelegt werden, wenn sie nicht luftdicht sind.
Es kann auch vorkommen, dass Programmierer Eigenschaften von übergeordneten Klassen vergessen oder erben, ohne zu wissen, dass dadurch auch ein kritischer Überprüfungsprozess in ihrem Code ausgelassen wird. Im Allgemeinen sollten Autorisierungsprüfungen auf Objektebene für jede Funktion vorgesehen werden, die mithilfe einer Benutzereingabe auf eine Datenquelle zugreift.
Denken Sie, Sie kennen sich bereits mit diesen aus und können einen Fehler in der Zugriffskontrolle sofort finden, beheben und beheben? Spiele die spielerische Herausforderung:
Wie ist es dir ergangen? Wenn du an deinem Ergebnis arbeiten willst, lies weiter!
Was sind einige Beispiele für Sicherheitslücken bei der Autorisierung auf Objektebene?
Sicherheitslücken bei der Zugriffskontrolle auf Objektebene ermöglichen es Angreifern, Maßnahmen zu ergreifen, zu denen sie nicht zugelassen werden sollten. Dabei kann es sich um eine Aktion handeln, die Administratoren vorbehalten sein sollte, wie etwa der Zugriff auf oder das Anzeigen vertraulicher Daten oder das Löschen von Datensätzen. In einer hochsicheren Umgebung kann dies sogar bedeuten, dass niemand die Aufzeichnungen überhaupt einsehen kann, sofern er nicht ausdrücklich dazu autorisiert ist.
Bei der Definition der Autorisierung auf Objektebene sollten Sie alle möglichen Aktionen berücksichtigen. In der Java Spring API könnte ein Endpunkt mit einem potenziellen Problem beispielsweise so aussehen:
public boolean deleteOrder (Lange ID) {
Bestellung = OrderRepository.getOne (id);
wenn (Reihenfolge == null) {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
}
Benutzerbenutzer = order.getUser ();
OrderRepository.delete (Bestellung);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
Der API-Endpunkt löscht Bestellungen anhand der ID, überprüft jedoch nicht, ob diese Bestellung vom aktuell angemeldeten Benutzer getätigt wurde. Dies bietet einem Angreifer die Möglichkeit, diese Lücke auszunutzen und die Bestellungen anderer Benutzer zu löschen.
Damit sichere Zugriffsbeschränkungen ordnungsgemäß implementiert werden können, würde der Code eher so aussehen:
public boolean deleteOrder (Lange ID) {
Benutzerbenutzer = UserService.getUserByContext ();
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
wenn (OrderExist) {
orderrepository.deleteById (id);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
} sonst {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
Beseitigung von Sicherheitslücken bei der Autorisierung auf Objektebene
Der Zugriffskontrollcode muss nicht übermäßig kompliziert sein. Im Fall unseres Beispiels für eine Java-Spring-API-Umgebung kann dies behoben werden, indem genau definiert wird, wer auf Objekte zugreifen kann.
Zunächst muss ein Überprüfungsprozess implementiert werden, um festzustellen, wer die Anfrage stellt:
Benutzerbenutzer = UserService.getUserByContext ();
Als Nächstes müssen wir sicherstellen, dass die Objekt-ID existiert und dem Benutzer gehört, der die Anfrage stellt:
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
Und schließlich löschen wir das Objekt:
orderrepository.deleteById (id);
Denken Sie daran, dass Sie sicherstellen müssen, dass die Autorisierungsmethode in Ihrem Code den Benutzerrichtlinien und Datenzugriffskontrollen Ihres Unternehmens entspricht. Um sicherzustellen, dass Ihr Code vollständig sicher ist, sollten Sie Prüfungen durchführen, um sicherzustellen, dass Benutzer mit unterschiedlichen Berechtigungsstufen Zugriff auf die Daten haben, die sie für ihre Arbeit benötigen, aber daran gehindert werden, Inhalte einzusehen oder zu ändern, die auf sie beschränkt sein sollten. Dadurch könnten Sicherheitslücken bei der Steuerung fehlender Objekte aufgedeckt werden, die versehentlich übersehen wurden.
Die wichtigsten Erkenntnisse aus diesen Beispielen bestehen darin, zunächst jede Aktion zu definieren, die ein Benutzer mit einem Objekt ausführen könnte, und dann dem Code direkt starke Zugriffskontrollen hinzuzufügen. Und schließlich sollten Sie niemals darauf vertrauen, dass die vererbten übergeordneten Eigenschaften diese Aufgabe erledigen oder diese Autorität an eine andere Stelle delegieren. Definieren Sie stattdessen Benutzerberechtigungen und Aktionen im Code explizit für jeden Objekttyp, den Sie schützen müssen.
Schauen Sie sich das an Sicherer Codekrieger Blogseiten mit weiteren Informationen zu dieser Sicherheitslücke und dazu, wie Sie Ihr Unternehmen und Ihre Kunden vor den Folgen anderer Sicherheitslücken schützen können. Sie können auch probiere eine Demo der Secure Code Warrior-Schulungsplattform, um all Ihre Cybersicherheitsfähigkeiten zu verbessern und auf dem neuesten Stand zu halten.

Bedrohungen der Cybersicherheit sind heutzutage allgegenwärtig und unerbittlich. Es ist so schlimm geworden, dass es fast unmöglich geworden ist, nach der Bereitstellung von Programmen mit ihnen Schritt zu halten. Im Zeitalter von DevSecOps, kontinuierlicher Bereitstellung und mehr Daten als je zuvor helfen kluge Unternehmen ihren Entwicklern jedoch dabei, sich zu sicherheitsbewussten Superstars weiterzubilden, die dabei helfen, häufig auftretende Sicherheitslücken zu beseitigen, bevor sie überhaupt in die Produktion gelangen. Wir haben uns damit befasst Sicherheitslücken im Internet, plus unser eigenes Die 8 wichtigsten Infrastrukturen als Code Bugs, und jetzt ist es an der Zeit, sich mit der nächsten großen Softwaresicherheitsherausforderung vertraut zu machen. Bist du bereit?
Diese nächste Blogserie wird sich auf einige der schlimmsten Sicherheitslücken konzentrieren, die sich auf Anwendungsprogrammierschnittstellen (APIs) beziehen. Diese sind so schlimm, dass sie das Open Web Application Security Project ins Leben gerufen haben (WESPE) Liste der wichtigsten API-Schwachstellen. Angesichts der Bedeutung von APIs für moderne Computerinfrastrukturen handelt es sich um kritische Probleme, die Sie um jeden Preis von Ihren Anwendungen und Programmen fernhalten müssen.
Ein perfektes Beispiel dafür, warum es wichtig ist, Code zur Durchsetzung der Sicherheit zu verwenden, findet sich in einer Untersuchung der Sicherheitsanfälligkeit für eine fehlerhafte Autorisierung auf Objektebene. Dies passiert, wenn Programmierer nicht explizit definieren, welche Benutzer Objekte und Daten anzeigen können, oder wenn sie irgendeine Form der Überprüfung vornehmen, um Objekte anzusehen, zu ändern oder andere Anfragen zu stellen, um sie zu manipulieren oder auf Objekte zuzugreifen, sodass sie Objekte und Daten über API-Endpunkte ändern und darauf zugreifen können. Ein API-Endpunkt ist ein Kontaktpunkt, oft eine URL, der für die Kommunikation zwischen der API selbst und einem anderen System verwendet wird. Die Fähigkeit zur Konnektivität zwischen Apps hat einige der beliebtesten Softwareprogramme der Welt verbessert, aber es besteht das Risiko, dass mehrere Endpunkte offengelegt werden, wenn sie nicht luftdicht sind.
Es kann auch vorkommen, dass Programmierer Eigenschaften von übergeordneten Klassen vergessen oder erben, ohne zu wissen, dass dadurch auch ein kritischer Überprüfungsprozess in ihrem Code ausgelassen wird. Im Allgemeinen sollten Autorisierungsprüfungen auf Objektebene für jede Funktion vorgesehen werden, die mithilfe einer Benutzereingabe auf eine Datenquelle zugreift.
Denken Sie, Sie kennen sich bereits mit diesen aus und können einen Fehler in der Zugriffskontrolle sofort finden, beheben und beheben? Spiele die spielerische Herausforderung:
Wie ist es dir ergangen? Wenn du an deinem Ergebnis arbeiten willst, lies weiter!
Was sind einige Beispiele für Sicherheitslücken bei der Autorisierung auf Objektebene?
Sicherheitslücken bei der Zugriffskontrolle auf Objektebene ermöglichen es Angreifern, Maßnahmen zu ergreifen, zu denen sie nicht zugelassen werden sollten. Dabei kann es sich um eine Aktion handeln, die Administratoren vorbehalten sein sollte, wie etwa der Zugriff auf oder das Anzeigen vertraulicher Daten oder das Löschen von Datensätzen. In einer hochsicheren Umgebung kann dies sogar bedeuten, dass niemand die Aufzeichnungen überhaupt einsehen kann, sofern er nicht ausdrücklich dazu autorisiert ist.
Bei der Definition der Autorisierung auf Objektebene sollten Sie alle möglichen Aktionen berücksichtigen. In der Java Spring API könnte ein Endpunkt mit einem potenziellen Problem beispielsweise so aussehen:
public boolean deleteOrder (Lange ID) {
Bestellung = OrderRepository.getOne (id);
wenn (Reihenfolge == null) {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
}
Benutzerbenutzer = order.getUser ();
OrderRepository.delete (Bestellung);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
Der API-Endpunkt löscht Bestellungen anhand der ID, überprüft jedoch nicht, ob diese Bestellung vom aktuell angemeldeten Benutzer getätigt wurde. Dies bietet einem Angreifer die Möglichkeit, diese Lücke auszunutzen und die Bestellungen anderer Benutzer zu löschen.
Damit sichere Zugriffsbeschränkungen ordnungsgemäß implementiert werden können, würde der Code eher so aussehen:
public boolean deleteOrder (Lange ID) {
Benutzerbenutzer = UserService.getUserByContext ();
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
wenn (OrderExist) {
orderrepository.deleteById (id);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
} sonst {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
Beseitigung von Sicherheitslücken bei der Autorisierung auf Objektebene
Der Zugriffskontrollcode muss nicht übermäßig kompliziert sein. Im Fall unseres Beispiels für eine Java-Spring-API-Umgebung kann dies behoben werden, indem genau definiert wird, wer auf Objekte zugreifen kann.
Zunächst muss ein Überprüfungsprozess implementiert werden, um festzustellen, wer die Anfrage stellt:
Benutzerbenutzer = UserService.getUserByContext ();
Als Nächstes müssen wir sicherstellen, dass die Objekt-ID existiert und dem Benutzer gehört, der die Anfrage stellt:
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
Und schließlich löschen wir das Objekt:
orderrepository.deleteById (id);
Denken Sie daran, dass Sie sicherstellen müssen, dass die Autorisierungsmethode in Ihrem Code den Benutzerrichtlinien und Datenzugriffskontrollen Ihres Unternehmens entspricht. Um sicherzustellen, dass Ihr Code vollständig sicher ist, sollten Sie Prüfungen durchführen, um sicherzustellen, dass Benutzer mit unterschiedlichen Berechtigungsstufen Zugriff auf die Daten haben, die sie für ihre Arbeit benötigen, aber daran gehindert werden, Inhalte einzusehen oder zu ändern, die auf sie beschränkt sein sollten. Dadurch könnten Sicherheitslücken bei der Steuerung fehlender Objekte aufgedeckt werden, die versehentlich übersehen wurden.
Die wichtigsten Erkenntnisse aus diesen Beispielen bestehen darin, zunächst jede Aktion zu definieren, die ein Benutzer mit einem Objekt ausführen könnte, und dann dem Code direkt starke Zugriffskontrollen hinzuzufügen. Und schließlich sollten Sie niemals darauf vertrauen, dass die vererbten übergeordneten Eigenschaften diese Aufgabe erledigen oder diese Autorität an eine andere Stelle delegieren. Definieren Sie stattdessen Benutzerberechtigungen und Aktionen im Code explizit für jeden Objekttyp, den Sie schützen müssen.
Schauen Sie sich das an Sicherer Codekrieger Blogseiten mit weiteren Informationen zu dieser Sicherheitslücke und dazu, wie Sie Ihr Unternehmen und Ihre Kunden vor den Folgen anderer Sicherheitslücken schützen können. Sie können auch probiere eine Demo der Secure Code Warrior-Schulungsplattform, um all Ihre Cybersicherheitsfähigkeiten zu verbessern und auf dem neuesten Stand zu halten.

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.
Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Consulter le rapportRéserver une démonstrationMatias Madou est expert en sécurité, chercheur, directeur technique et cofondateur de Secure Code Warrior. Matias a obtenu son doctorat en sécurité des applications à l'université de Gand, en se concentrant sur les solutions d'analyse statique. Il a ensuite rejoint Fortify aux États-Unis, où il s'est rendu compte qu'il ne suffisait pas de détecter les problèmes de code sans aider les développeurs à écrire du code sécurisé. C'est ce qui l'a incité à développer des produits qui aident les développeurs, allègent le fardeau de la sécurité et dépassent les attentes des clients. Lorsqu'il n'est pas à son bureau en tant que membre de l'équipe Awesome, il aime être sur scène pour présenter des conférences, notamment RSA Conference, BlackHat et DefCon.
Matias est un chercheur et un développeur qui possède plus de 15 ans d'expérience pratique dans le domaine de la sécurité des logiciels. Il a développé des solutions pour des entreprises telles que Fortify Software et sa propre entreprise Sensei Security. Au cours de sa carrière, Matias a dirigé de nombreux projets de recherche sur la sécurité des applications qui ont débouché sur des produits commerciaux et peut se targuer d'avoir déposé plus de 10 brevets. Lorsqu'il n'est pas à son bureau, Matias a été instructeur pour des formations avancées en matière de sécurité des applications ( courses ) et intervient régulièrement lors de conférences mondiales telles que RSA Conference, Black Hat, DefCon, BSIMM, OWASP AppSec et BruCon.
Matias est titulaire d'un doctorat en ingénierie informatique de l'Université de Gand, où il a étudié la sécurité des applications par le biais de l'obscurcissement des programmes afin de dissimuler le fonctionnement interne d'une application.
Bedrohungen der Cybersicherheit sind heutzutage allgegenwärtig und unerbittlich. Es ist so schlimm geworden, dass es fast unmöglich geworden ist, nach der Bereitstellung von Programmen mit ihnen Schritt zu halten. Im Zeitalter von DevSecOps, kontinuierlicher Bereitstellung und mehr Daten als je zuvor helfen kluge Unternehmen ihren Entwicklern jedoch dabei, sich zu sicherheitsbewussten Superstars weiterzubilden, die dabei helfen, häufig auftretende Sicherheitslücken zu beseitigen, bevor sie überhaupt in die Produktion gelangen. Wir haben uns damit befasst Sicherheitslücken im Internet, plus unser eigenes Die 8 wichtigsten Infrastrukturen als Code Bugs, und jetzt ist es an der Zeit, sich mit der nächsten großen Softwaresicherheitsherausforderung vertraut zu machen. Bist du bereit?
Diese nächste Blogserie wird sich auf einige der schlimmsten Sicherheitslücken konzentrieren, die sich auf Anwendungsprogrammierschnittstellen (APIs) beziehen. Diese sind so schlimm, dass sie das Open Web Application Security Project ins Leben gerufen haben (WESPE) Liste der wichtigsten API-Schwachstellen. Angesichts der Bedeutung von APIs für moderne Computerinfrastrukturen handelt es sich um kritische Probleme, die Sie um jeden Preis von Ihren Anwendungen und Programmen fernhalten müssen.
Ein perfektes Beispiel dafür, warum es wichtig ist, Code zur Durchsetzung der Sicherheit zu verwenden, findet sich in einer Untersuchung der Sicherheitsanfälligkeit für eine fehlerhafte Autorisierung auf Objektebene. Dies passiert, wenn Programmierer nicht explizit definieren, welche Benutzer Objekte und Daten anzeigen können, oder wenn sie irgendeine Form der Überprüfung vornehmen, um Objekte anzusehen, zu ändern oder andere Anfragen zu stellen, um sie zu manipulieren oder auf Objekte zuzugreifen, sodass sie Objekte und Daten über API-Endpunkte ändern und darauf zugreifen können. Ein API-Endpunkt ist ein Kontaktpunkt, oft eine URL, der für die Kommunikation zwischen der API selbst und einem anderen System verwendet wird. Die Fähigkeit zur Konnektivität zwischen Apps hat einige der beliebtesten Softwareprogramme der Welt verbessert, aber es besteht das Risiko, dass mehrere Endpunkte offengelegt werden, wenn sie nicht luftdicht sind.
Es kann auch vorkommen, dass Programmierer Eigenschaften von übergeordneten Klassen vergessen oder erben, ohne zu wissen, dass dadurch auch ein kritischer Überprüfungsprozess in ihrem Code ausgelassen wird. Im Allgemeinen sollten Autorisierungsprüfungen auf Objektebene für jede Funktion vorgesehen werden, die mithilfe einer Benutzereingabe auf eine Datenquelle zugreift.
Denken Sie, Sie kennen sich bereits mit diesen aus und können einen Fehler in der Zugriffskontrolle sofort finden, beheben und beheben? Spiele die spielerische Herausforderung:
Wie ist es dir ergangen? Wenn du an deinem Ergebnis arbeiten willst, lies weiter!
Was sind einige Beispiele für Sicherheitslücken bei der Autorisierung auf Objektebene?
Sicherheitslücken bei der Zugriffskontrolle auf Objektebene ermöglichen es Angreifern, Maßnahmen zu ergreifen, zu denen sie nicht zugelassen werden sollten. Dabei kann es sich um eine Aktion handeln, die Administratoren vorbehalten sein sollte, wie etwa der Zugriff auf oder das Anzeigen vertraulicher Daten oder das Löschen von Datensätzen. In einer hochsicheren Umgebung kann dies sogar bedeuten, dass niemand die Aufzeichnungen überhaupt einsehen kann, sofern er nicht ausdrücklich dazu autorisiert ist.
Bei der Definition der Autorisierung auf Objektebene sollten Sie alle möglichen Aktionen berücksichtigen. In der Java Spring API könnte ein Endpunkt mit einem potenziellen Problem beispielsweise so aussehen:
public boolean deleteOrder (Lange ID) {
Bestellung = OrderRepository.getOne (id);
wenn (Reihenfolge == null) {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
}
Benutzerbenutzer = order.getUser ();
OrderRepository.delete (Bestellung);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
Der API-Endpunkt löscht Bestellungen anhand der ID, überprüft jedoch nicht, ob diese Bestellung vom aktuell angemeldeten Benutzer getätigt wurde. Dies bietet einem Angreifer die Möglichkeit, diese Lücke auszunutzen und die Bestellungen anderer Benutzer zu löschen.
Damit sichere Zugriffsbeschränkungen ordnungsgemäß implementiert werden können, würde der Code eher so aussehen:
public boolean deleteOrder (Lange ID) {
Benutzerbenutzer = UserService.getUserByContext ();
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
wenn (OrderExist) {
orderrepository.deleteById (id);
log.info („Bestellung für Benutzer {} löschen“, user.getId ());
gib wahr zurück;
} sonst {
log.info („Keine Bestellung gefunden“);
gib falsch zurück;
Beseitigung von Sicherheitslücken bei der Autorisierung auf Objektebene
Der Zugriffskontrollcode muss nicht übermäßig kompliziert sein. Im Fall unseres Beispiels für eine Java-Spring-API-Umgebung kann dies behoben werden, indem genau definiert wird, wer auf Objekte zugreifen kann.
Zunächst muss ein Überprüfungsprozess implementiert werden, um festzustellen, wer die Anfrage stellt:
Benutzerbenutzer = UserService.getUserByContext ();
Als Nächstes müssen wir sicherstellen, dass die Objekt-ID existiert und dem Benutzer gehört, der die Anfrage stellt:
boolean orderExist = getUserOrders () .stream ()
.anyMatch (order -> (order.getId () == id));
Und schließlich löschen wir das Objekt:
orderrepository.deleteById (id);
Denken Sie daran, dass Sie sicherstellen müssen, dass die Autorisierungsmethode in Ihrem Code den Benutzerrichtlinien und Datenzugriffskontrollen Ihres Unternehmens entspricht. Um sicherzustellen, dass Ihr Code vollständig sicher ist, sollten Sie Prüfungen durchführen, um sicherzustellen, dass Benutzer mit unterschiedlichen Berechtigungsstufen Zugriff auf die Daten haben, die sie für ihre Arbeit benötigen, aber daran gehindert werden, Inhalte einzusehen oder zu ändern, die auf sie beschränkt sein sollten. Dadurch könnten Sicherheitslücken bei der Steuerung fehlender Objekte aufgedeckt werden, die versehentlich übersehen wurden.
Die wichtigsten Erkenntnisse aus diesen Beispielen bestehen darin, zunächst jede Aktion zu definieren, die ein Benutzer mit einem Objekt ausführen könnte, und dann dem Code direkt starke Zugriffskontrollen hinzuzufügen. Und schließlich sollten Sie niemals darauf vertrauen, dass die vererbten übergeordneten Eigenschaften diese Aufgabe erledigen oder diese Autorität an eine andere Stelle delegieren. Definieren Sie stattdessen Benutzerberechtigungen und Aktionen im Code explizit für jeden Objekttyp, den Sie schützen müssen.
Schauen Sie sich das an Sicherer Codekrieger Blogseiten mit weiteren Informationen zu dieser Sicherheitslücke und dazu, wie Sie Ihr Unternehmen und Ihre Kunden vor den Folgen anderer Sicherheitslücken schützen können. Sie können auch probiere eine Demo der Secure Code Warrior-Schulungsplattform, um all Ihre Cybersicherheitsfähigkeiten zu verbessern und auf dem neuesten Stand zu halten.
Table des matières
Matias Madou est expert en sécurité, chercheur, directeur technique et cofondateur de Secure Code Warrior. Matias a obtenu son doctorat en sécurité des applications à l'université de Gand, en se concentrant sur les solutions d'analyse statique. Il a ensuite rejoint Fortify aux États-Unis, où il s'est rendu compte qu'il ne suffisait pas de détecter les problèmes de code sans aider les développeurs à écrire du code sécurisé. C'est ce qui l'a incité à développer des produits qui aident les développeurs, allègent le fardeau de la sécurité et dépassent les attentes des clients. Lorsqu'il n'est pas à son bureau en tant que membre de l'équipe Awesome, il aime être sur scène pour présenter des conférences, notamment RSA Conference, BlackHat et DefCon.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.
Réserver une démonstrationTéléchargerRessources pour débuter
Thèmes et contenus de la formation Securecode
Nos contenus de pointe sont constamment développés afin de s'adapter à l'évolution constante du paysage du développement logiciel, en tenant compte de votre rôle. Les thèmes abordés couvrent tous les domaines, de l'IA à l'injection XQuery, et sont proposés pour une multitude de rôles, des architectes et ingénieurs aux chefs de produit et responsables assurance qualité. Nous vous invitons à découvrir un aperçu de notre catalogue de contenus classés par thème et par rôle.
La Chambre de commerce établit la norme en matière de sécurité à grande échelle axée sur les développeurs
La Chambre de commerce néerlandaise explique comment elle a intégré le codage sécurisé dans le développement quotidien grâce à des certifications basées sur les rôles, à l'évaluation comparative du Trust Score et à une culture de responsabilité partagée en matière de sécurité.
Modélisation des menaces avec l'IA : transformer chaque développeur en modélisateur de menaces
Vous repartirez mieux équipé pour aider les développeurs à combiner les idées et les techniques de modélisation des menaces avec les outils d'IA qu'ils utilisent déjà pour renforcer la sécurité, améliorer la collaboration et créer des logiciels plus résilients dès le départ.
Ressources pour débuter
Cybermon est de retour : les missions KI « Beat the Boss » sont désormais disponibles sur demande.
Cybermon 2025 Beat the Boss est désormais disponible toute l'année dans SCW. Il utilise des exigences de sécurité IA/LLM avancées pour renforcer le développement sécurisé de l'IA à grande échelle.
Explication de la loi sur la cyber-résilience : implications pour le développement de logiciels sécurisés dès la conception
Découvrez les exigences de la loi européenne sur la cyber-résilience (CRA), à qui elle s'applique et comment les équipes de développement peuvent s'y préparer en adoptant des méthodes sécurisées, en prévenant les failles de sécurité et en renforçant les compétences des développeurs.
Facteur 1 : Critères de réussite définis et mesurables
Le catalyseur n° 1 inaugure notre série en dix parties intitulée « Les catalyseurs de la réussite » et démontre comment un codage sécurisé peut être associé à des résultats commerciaux tels que la réduction des risques et la rapidité afin d'atteindre une maturité programmatique à long terme.




%20(1).avif)
.avif)
