
Les codeurs conquièrent la série des 10 meilleures API de l'OWASP en matière de sécurité : autorisation au niveau des objets cassés
De nos jours, les menaces à la cybersécurité sont omniprésentes et incessantes. La situation s'est tellement aggravée qu'il est devenu presque impossible d'essayer de les suivre après le déploiement des programmes. Cependant, à l'ère du DevSecOps, de la diffusion continue et de l'augmentation des revenus liés aux données, les organisations astucieuses aident leurs développeurs à améliorer leurs compétences pour devenir des superstars sensibles à la sécurité qui les aident à éliminer les vulnérabilités courantes avant même qu'elles ne soient mises en production. Nous avons abordé vulnérabilités du Web, ainsi que notre propre Les 8 meilleures infrastructures en tant que code bugs, et il est maintenant temps de se familiariser avec le prochain grand défi en matière de sécurité logicielle. Es-tu prêt ?
Cette prochaine série de blogs se concentrera sur certains des pires bogues de sécurité liés aux interfaces de programmation d'applications (API). Ils sont si mauvais qu'ils ont créé l'Open Web Application Security Project (GUÊPE) liste des principales vulnérabilités des API. Compte tenu de l'importance des API pour les infrastructures informatiques modernes, il s'agit de problèmes critiques que vous devez à tout prix éviter dans vos applications et programmes.
Un exemple parfait de la raison pour laquelle il est essentiel d'utiliser du code pour renforcer la sécurité peut être trouvé dans l'examen de la vulnérabilité d'autorisation au niveau des objets cassés. Cela se produit lorsque les programmeurs ne définissent pas explicitement quels utilisateurs peuvent visualiser des objets et des données, ou ne fournissent aucune forme de vérification pour afficher, modifier ou effectuer d'autres demandes pour manipuler des objets ou y accéder, ce qui leur permet de modifier et d'accéder aux objets et aux données via les points de terminaison de l'API. Un point de terminaison d'API est un point de contact, souvent une URL, utilisé pour la communication entre l'API elle-même et un autre système. La capacité de connectivité entre les applications a amélioré certains des logiciels les plus appréciés au monde, mais elle risque d'exposer plusieurs terminaux s'ils ne sont pas étanches.
Cela peut également se produire lorsque les codeurs oublient ou héritent des propriétés des classes parentes, sans se rendre compte que cela exclut également un processus de vérification critique dans leur code. En général, des contrôles d'autorisation au niveau de l'objet doivent être inclus pour chaque fonction qui accède à une source de données à l'aide d'une entrée de l'utilisateur.
Vous pensez les connaître déjà et pouvoir détecter, corriger et éliminer un bogue de contrôle d'accès dès maintenant ? Jouez au défi gamifié :
Comment t'es-tu débrouillé ? Si tu veux travailler sur ta partition, continue à lire !
Quels sont quelques exemples de vulnérabilités d'autorisation au niveau de l'objet non respectées ?
Les vulnérabilités de contrôle d'accès au niveau des objets permettent aux attaquants de prendre des mesures qu'ils ne devraient pas être autorisés à effectuer. Il peut s'agir d'une action qui devrait être réservée aux administrateurs, comme l'accès ou la visualisation de données sensibles, ou la destruction d'enregistrements. Dans un environnement hautement sécurisé, cela peut même signifier empêcher quiconque de consulter les enregistrements à moins d'y être spécifiquement autorisé.
Vous devez tenir compte de toutes les actions possibles lorsque vous définissez l'autorisation au niveau de l'objet. Par exemple, dans l'API Java Spring, un point de terminaison présentant un problème potentiel peut ressembler à ceci :
public boolean DeleteOrder (ID long) {
Ordre de commande = OrderRepository.getOne (id) ;
si (ordre == nul) {
log.info (« Ordre introuvable ») ;
renvoie faux ;
}
Utilisateur user = Order.getUser () ;
OrderRepository.delete (ordre) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
Le point de terminaison de l'API supprime les commandes par identifiant, mais ne vérifie pas si cette commande a été passée par l'utilisateur actuellement connecté. Cela représente une opportunité pour un attaquant d'exploiter cette faille et de supprimer les commandes des autres utilisateurs.
Pour que les restrictions d'accès sécurisé soient correctement mises en œuvre, le code devrait ressembler à ceci :
public boolean DeleteOrder (ID long) {
Utilisateur utilisateur = UserService.getUserByContext () ;
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
si (OrderExist) {
OrderRepository.deleteById (id) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
} autre {
log.info (« Ordre introuvable ») ;
renvoie faux ;
Élimination des vulnérabilités liées à l'autorisation au niveau de l'objet
Le code de contrôle d'accès n'a pas besoin d'être trop compliqué. Dans le cas de notre exemple d'environnement d'API Java Spring, il est possible de résoudre ce problème en définissant précisément qui peut accéder aux objets.
Tout d'abord, un processus de vérification doit être mis en place afin d'identifier l'auteur de la demande :
Utilisateur utilisateur = UserService.getUserByContext () ;
Ensuite, nous devons nous assurer que l'identifiant de l'objet existe et qu'il appartient à l'utilisateur qui fait la demande :
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
Et enfin, nous procédons à la suppression de l'objet :
OrderRepository.deleteById (id) ;
N'oubliez pas que vous devez vous assurer que la méthode d'autorisation de votre code est conforme aux politiques des utilisateurs et aux contrôles d'accès aux données de votre organisation. Afin de vous assurer que votre code est totalement sécurisé, vous devez vérifier que les utilisateurs disposant de différents niveaux d'autorisation ont accès aux données dont ils ont besoin pour effectuer leur travail, mais qu'ils ne peuvent pas consulter ou modifier tout ce qui devrait leur être réservé. Cela pourrait révéler des vulnérabilités de contrôle d'objets manquantes qui ont été accidentellement négligées.
Les principaux enseignements de ces exemples sont de définir d'abord toutes les actions qu'un utilisateur peut effectuer avec un objet, puis d'ajouter des contrôles d'accès puissants directement au code. Enfin, ne vous fiez jamais aux propriétés parentes héritées pour effectuer ce travail ou pour déléguer cette autorité à un autre endroit. Définissez plutôt les autorisations et les actions des utilisateurs dans le code de manière explicite pour chaque type d'objet à protéger.
Consultez le Secure Code Warrior pages de blog pour en savoir plus sur cette vulnérabilité et sur la manière de protéger votre organisation et vos clients des ravages causés par d'autres failles de sécurité. Vous pouvez également essayez une démo de la plateforme de formation Secure Code Warrior pour maintenir toutes vos compétences en cybersécurité à jour et à jour.


En général, des contrôles d'autorisation au niveau de l'objet doivent être inclus pour chaque fonction qui accède à une source de données à l'aide d'une entrée de l'utilisateur, faute de quoi le faire comporte de grands risques.
마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 주기 전반에 걸쳐 코드를 안전하게 보호하고 사이버보안이 최우선 과제인 문화를 조성하도록 Secure Code Warrior . 애플리케이션 보안 담당자, 개발자, IT 보안 책임자 또는 보안 관련 업무에 종사하는 모든 분들을 위해, 저희는 귀사의 조직이 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.
데모 예약하기마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.
Matias는 15년 이상의 소프트웨어 보안 경험을 가진 연구원이자 개발자입니다. 그는 Fortify 소프트웨어와 같은 회사와 자신의 회사를 위한 솔루션을 개발했습니다. Sensei 안전. 그의 경력을 통해, Matias는 상용 제품으로 주도하고 자신의 벨트 아래 10 개 이상의 특허를 자랑하는 여러 응용 프로그램 보안 연구 프로젝트를 주도하고있다. 마티아스는 책상에서 떨어져 있을 때 고급 응용 프로그램 보안 교육을 위한 강사로 일했습니다. courses RSA 컨퍼런스, 블랙 햇, 데프콘, BSIMM, OWASP AppSec 및 브루콘을 포함한 글로벌 컨퍼런스에서 정기적으로 강연합니다.
마티아스는 겐트 대학교에서 컴퓨터 공학 박사 학위를 취득했으며, 프로그램 난독화를 통해 응용 프로그램 보안을 연구하여 응용 프로그램의 내부 작동을 숨깁니다.


De nos jours, les menaces à la cybersécurité sont omniprésentes et incessantes. La situation s'est tellement aggravée qu'il est devenu presque impossible d'essayer de les suivre après le déploiement des programmes. Cependant, à l'ère du DevSecOps, de la diffusion continue et de l'augmentation des revenus liés aux données, les organisations astucieuses aident leurs développeurs à améliorer leurs compétences pour devenir des superstars sensibles à la sécurité qui les aident à éliminer les vulnérabilités courantes avant même qu'elles ne soient mises en production. Nous avons abordé vulnérabilités du Web, ainsi que notre propre Les 8 meilleures infrastructures en tant que code bugs, et il est maintenant temps de se familiariser avec le prochain grand défi en matière de sécurité logicielle. Es-tu prêt ?
Cette prochaine série de blogs se concentrera sur certains des pires bogues de sécurité liés aux interfaces de programmation d'applications (API). Ils sont si mauvais qu'ils ont créé l'Open Web Application Security Project (GUÊPE) liste des principales vulnérabilités des API. Compte tenu de l'importance des API pour les infrastructures informatiques modernes, il s'agit de problèmes critiques que vous devez à tout prix éviter dans vos applications et programmes.
Un exemple parfait de la raison pour laquelle il est essentiel d'utiliser du code pour renforcer la sécurité peut être trouvé dans l'examen de la vulnérabilité d'autorisation au niveau des objets cassés. Cela se produit lorsque les programmeurs ne définissent pas explicitement quels utilisateurs peuvent visualiser des objets et des données, ou ne fournissent aucune forme de vérification pour afficher, modifier ou effectuer d'autres demandes pour manipuler des objets ou y accéder, ce qui leur permet de modifier et d'accéder aux objets et aux données via les points de terminaison de l'API. Un point de terminaison d'API est un point de contact, souvent une URL, utilisé pour la communication entre l'API elle-même et un autre système. La capacité de connectivité entre les applications a amélioré certains des logiciels les plus appréciés au monde, mais elle risque d'exposer plusieurs terminaux s'ils ne sont pas étanches.
Cela peut également se produire lorsque les codeurs oublient ou héritent des propriétés des classes parentes, sans se rendre compte que cela exclut également un processus de vérification critique dans leur code. En général, des contrôles d'autorisation au niveau de l'objet doivent être inclus pour chaque fonction qui accède à une source de données à l'aide d'une entrée de l'utilisateur.
Vous pensez les connaître déjà et pouvoir détecter, corriger et éliminer un bogue de contrôle d'accès dès maintenant ? Jouez au défi gamifié :
Comment t'es-tu débrouillé ? Si tu veux travailler sur ta partition, continue à lire !
Quels sont quelques exemples de vulnérabilités d'autorisation au niveau de l'objet non respectées ?
Les vulnérabilités de contrôle d'accès au niveau des objets permettent aux attaquants de prendre des mesures qu'ils ne devraient pas être autorisés à effectuer. Il peut s'agir d'une action qui devrait être réservée aux administrateurs, comme l'accès ou la visualisation de données sensibles, ou la destruction d'enregistrements. Dans un environnement hautement sécurisé, cela peut même signifier empêcher quiconque de consulter les enregistrements à moins d'y être spécifiquement autorisé.
Vous devez tenir compte de toutes les actions possibles lorsque vous définissez l'autorisation au niveau de l'objet. Par exemple, dans l'API Java Spring, un point de terminaison présentant un problème potentiel peut ressembler à ceci :
public boolean DeleteOrder (ID long) {
Ordre de commande = OrderRepository.getOne (id) ;
si (ordre == nul) {
log.info (« Ordre introuvable ») ;
renvoie faux ;
}
Utilisateur user = Order.getUser () ;
OrderRepository.delete (ordre) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
Le point de terminaison de l'API supprime les commandes par identifiant, mais ne vérifie pas si cette commande a été passée par l'utilisateur actuellement connecté. Cela représente une opportunité pour un attaquant d'exploiter cette faille et de supprimer les commandes des autres utilisateurs.
Pour que les restrictions d'accès sécurisé soient correctement mises en œuvre, le code devrait ressembler à ceci :
public boolean DeleteOrder (ID long) {
Utilisateur utilisateur = UserService.getUserByContext () ;
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
si (OrderExist) {
OrderRepository.deleteById (id) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
} autre {
log.info (« Ordre introuvable ») ;
renvoie faux ;
Élimination des vulnérabilités liées à l'autorisation au niveau de l'objet
Le code de contrôle d'accès n'a pas besoin d'être trop compliqué. Dans le cas de notre exemple d'environnement d'API Java Spring, il est possible de résoudre ce problème en définissant précisément qui peut accéder aux objets.
Tout d'abord, un processus de vérification doit être mis en place afin d'identifier l'auteur de la demande :
Utilisateur utilisateur = UserService.getUserByContext () ;
Ensuite, nous devons nous assurer que l'identifiant de l'objet existe et qu'il appartient à l'utilisateur qui fait la demande :
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
Et enfin, nous procédons à la suppression de l'objet :
OrderRepository.deleteById (id) ;
N'oubliez pas que vous devez vous assurer que la méthode d'autorisation de votre code est conforme aux politiques des utilisateurs et aux contrôles d'accès aux données de votre organisation. Afin de vous assurer que votre code est totalement sécurisé, vous devez vérifier que les utilisateurs disposant de différents niveaux d'autorisation ont accès aux données dont ils ont besoin pour effectuer leur travail, mais qu'ils ne peuvent pas consulter ou modifier tout ce qui devrait leur être réservé. Cela pourrait révéler des vulnérabilités de contrôle d'objets manquantes qui ont été accidentellement négligées.
Les principaux enseignements de ces exemples sont de définir d'abord toutes les actions qu'un utilisateur peut effectuer avec un objet, puis d'ajouter des contrôles d'accès puissants directement au code. Enfin, ne vous fiez jamais aux propriétés parentes héritées pour effectuer ce travail ou pour déléguer cette autorité à un autre endroit. Définissez plutôt les autorisations et les actions des utilisateurs dans le code de manière explicite pour chaque type d'objet à protéger.
Consultez le Secure Code Warrior pages de blog pour en savoir plus sur cette vulnérabilité et sur la manière de protéger votre organisation et vos clients des ravages causés par d'autres failles de sécurité. Vous pouvez également essayez une démo de la plateforme de formation Secure Code Warrior pour maintenir toutes vos compétences en cybersécurité à jour et à jour.

De nos jours, les menaces à la cybersécurité sont omniprésentes et incessantes. La situation s'est tellement aggravée qu'il est devenu presque impossible d'essayer de les suivre après le déploiement des programmes. Cependant, à l'ère du DevSecOps, de la diffusion continue et de l'augmentation des revenus liés aux données, les organisations astucieuses aident leurs développeurs à améliorer leurs compétences pour devenir des superstars sensibles à la sécurité qui les aident à éliminer les vulnérabilités courantes avant même qu'elles ne soient mises en production. Nous avons abordé vulnérabilités du Web, ainsi que notre propre Les 8 meilleures infrastructures en tant que code bugs, et il est maintenant temps de se familiariser avec le prochain grand défi en matière de sécurité logicielle. Es-tu prêt ?
Cette prochaine série de blogs se concentrera sur certains des pires bogues de sécurité liés aux interfaces de programmation d'applications (API). Ils sont si mauvais qu'ils ont créé l'Open Web Application Security Project (GUÊPE) liste des principales vulnérabilités des API. Compte tenu de l'importance des API pour les infrastructures informatiques modernes, il s'agit de problèmes critiques que vous devez à tout prix éviter dans vos applications et programmes.
Un exemple parfait de la raison pour laquelle il est essentiel d'utiliser du code pour renforcer la sécurité peut être trouvé dans l'examen de la vulnérabilité d'autorisation au niveau des objets cassés. Cela se produit lorsque les programmeurs ne définissent pas explicitement quels utilisateurs peuvent visualiser des objets et des données, ou ne fournissent aucune forme de vérification pour afficher, modifier ou effectuer d'autres demandes pour manipuler des objets ou y accéder, ce qui leur permet de modifier et d'accéder aux objets et aux données via les points de terminaison de l'API. Un point de terminaison d'API est un point de contact, souvent une URL, utilisé pour la communication entre l'API elle-même et un autre système. La capacité de connectivité entre les applications a amélioré certains des logiciels les plus appréciés au monde, mais elle risque d'exposer plusieurs terminaux s'ils ne sont pas étanches.
Cela peut également se produire lorsque les codeurs oublient ou héritent des propriétés des classes parentes, sans se rendre compte que cela exclut également un processus de vérification critique dans leur code. En général, des contrôles d'autorisation au niveau de l'objet doivent être inclus pour chaque fonction qui accède à une source de données à l'aide d'une entrée de l'utilisateur.
Vous pensez les connaître déjà et pouvoir détecter, corriger et éliminer un bogue de contrôle d'accès dès maintenant ? Jouez au défi gamifié :
Comment t'es-tu débrouillé ? Si tu veux travailler sur ta partition, continue à lire !
Quels sont quelques exemples de vulnérabilités d'autorisation au niveau de l'objet non respectées ?
Les vulnérabilités de contrôle d'accès au niveau des objets permettent aux attaquants de prendre des mesures qu'ils ne devraient pas être autorisés à effectuer. Il peut s'agir d'une action qui devrait être réservée aux administrateurs, comme l'accès ou la visualisation de données sensibles, ou la destruction d'enregistrements. Dans un environnement hautement sécurisé, cela peut même signifier empêcher quiconque de consulter les enregistrements à moins d'y être spécifiquement autorisé.
Vous devez tenir compte de toutes les actions possibles lorsque vous définissez l'autorisation au niveau de l'objet. Par exemple, dans l'API Java Spring, un point de terminaison présentant un problème potentiel peut ressembler à ceci :
public boolean DeleteOrder (ID long) {
Ordre de commande = OrderRepository.getOne (id) ;
si (ordre == nul) {
log.info (« Ordre introuvable ») ;
renvoie faux ;
}
Utilisateur user = Order.getUser () ;
OrderRepository.delete (ordre) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
Le point de terminaison de l'API supprime les commandes par identifiant, mais ne vérifie pas si cette commande a été passée par l'utilisateur actuellement connecté. Cela représente une opportunité pour un attaquant d'exploiter cette faille et de supprimer les commandes des autres utilisateurs.
Pour que les restrictions d'accès sécurisé soient correctement mises en œuvre, le code devrait ressembler à ceci :
public boolean DeleteOrder (ID long) {
Utilisateur utilisateur = UserService.getUserByContext () ;
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
si (OrderExist) {
OrderRepository.deleteById (id) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
} autre {
log.info (« Ordre introuvable ») ;
renvoie faux ;
Élimination des vulnérabilités liées à l'autorisation au niveau de l'objet
Le code de contrôle d'accès n'a pas besoin d'être trop compliqué. Dans le cas de notre exemple d'environnement d'API Java Spring, il est possible de résoudre ce problème en définissant précisément qui peut accéder aux objets.
Tout d'abord, un processus de vérification doit être mis en place afin d'identifier l'auteur de la demande :
Utilisateur utilisateur = UserService.getUserByContext () ;
Ensuite, nous devons nous assurer que l'identifiant de l'objet existe et qu'il appartient à l'utilisateur qui fait la demande :
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
Et enfin, nous procédons à la suppression de l'objet :
OrderRepository.deleteById (id) ;
N'oubliez pas que vous devez vous assurer que la méthode d'autorisation de votre code est conforme aux politiques des utilisateurs et aux contrôles d'accès aux données de votre organisation. Afin de vous assurer que votre code est totalement sécurisé, vous devez vérifier que les utilisateurs disposant de différents niveaux d'autorisation ont accès aux données dont ils ont besoin pour effectuer leur travail, mais qu'ils ne peuvent pas consulter ou modifier tout ce qui devrait leur être réservé. Cela pourrait révéler des vulnérabilités de contrôle d'objets manquantes qui ont été accidentellement négligées.
Les principaux enseignements de ces exemples sont de définir d'abord toutes les actions qu'un utilisateur peut effectuer avec un objet, puis d'ajouter des contrôles d'accès puissants directement au code. Enfin, ne vous fiez jamais aux propriétés parentes héritées pour effectuer ce travail ou pour déléguer cette autorité à un autre endroit. Définissez plutôt les autorisations et les actions des utilisateurs dans le code de manière explicite pour chaque type d'objet à protéger.
Consultez le Secure Code Warrior pages de blog pour en savoir plus sur cette vulnérabilité et sur la manière de protéger votre organisation et vos clients des ravages causés par d'autres failles de sécurité. Vous pouvez également essayez une démo de la plateforme de formation Secure Code Warrior pour maintenir toutes vos compétences en cybersécurité à jour et à jour.

아래 링크를 클릭하고 이 자료의 PDF를 다운로드하세요.
Secure Code Warrior 귀사의 조직이 소프트웨어 개발 주기 전반에 걸쳐 코드를 안전하게 보호하고 사이버보안이 최우선 과제인 문화를 조성하도록 Secure Code Warrior . 애플리케이션 보안 담당자, 개발자, IT 보안 책임자 또는 보안 관련 업무에 종사하는 모든 분들을 위해, 저희는 귀사의 조직이 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.
보고서 표시데모 예약하기마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.
Matias는 15년 이상의 소프트웨어 보안 경험을 가진 연구원이자 개발자입니다. 그는 Fortify 소프트웨어와 같은 회사와 자신의 회사를 위한 솔루션을 개발했습니다. Sensei 안전. 그의 경력을 통해, Matias는 상용 제품으로 주도하고 자신의 벨트 아래 10 개 이상의 특허를 자랑하는 여러 응용 프로그램 보안 연구 프로젝트를 주도하고있다. 마티아스는 책상에서 떨어져 있을 때 고급 응용 프로그램 보안 교육을 위한 강사로 일했습니다. courses RSA 컨퍼런스, 블랙 햇, 데프콘, BSIMM, OWASP AppSec 및 브루콘을 포함한 글로벌 컨퍼런스에서 정기적으로 강연합니다.
마티아스는 겐트 대학교에서 컴퓨터 공학 박사 학위를 취득했으며, 프로그램 난독화를 통해 응용 프로그램 보안을 연구하여 응용 프로그램의 내부 작동을 숨깁니다.
De nos jours, les menaces à la cybersécurité sont omniprésentes et incessantes. La situation s'est tellement aggravée qu'il est devenu presque impossible d'essayer de les suivre après le déploiement des programmes. Cependant, à l'ère du DevSecOps, de la diffusion continue et de l'augmentation des revenus liés aux données, les organisations astucieuses aident leurs développeurs à améliorer leurs compétences pour devenir des superstars sensibles à la sécurité qui les aident à éliminer les vulnérabilités courantes avant même qu'elles ne soient mises en production. Nous avons abordé vulnérabilités du Web, ainsi que notre propre Les 8 meilleures infrastructures en tant que code bugs, et il est maintenant temps de se familiariser avec le prochain grand défi en matière de sécurité logicielle. Es-tu prêt ?
Cette prochaine série de blogs se concentrera sur certains des pires bogues de sécurité liés aux interfaces de programmation d'applications (API). Ils sont si mauvais qu'ils ont créé l'Open Web Application Security Project (GUÊPE) liste des principales vulnérabilités des API. Compte tenu de l'importance des API pour les infrastructures informatiques modernes, il s'agit de problèmes critiques que vous devez à tout prix éviter dans vos applications et programmes.
Un exemple parfait de la raison pour laquelle il est essentiel d'utiliser du code pour renforcer la sécurité peut être trouvé dans l'examen de la vulnérabilité d'autorisation au niveau des objets cassés. Cela se produit lorsque les programmeurs ne définissent pas explicitement quels utilisateurs peuvent visualiser des objets et des données, ou ne fournissent aucune forme de vérification pour afficher, modifier ou effectuer d'autres demandes pour manipuler des objets ou y accéder, ce qui leur permet de modifier et d'accéder aux objets et aux données via les points de terminaison de l'API. Un point de terminaison d'API est un point de contact, souvent une URL, utilisé pour la communication entre l'API elle-même et un autre système. La capacité de connectivité entre les applications a amélioré certains des logiciels les plus appréciés au monde, mais elle risque d'exposer plusieurs terminaux s'ils ne sont pas étanches.
Cela peut également se produire lorsque les codeurs oublient ou héritent des propriétés des classes parentes, sans se rendre compte que cela exclut également un processus de vérification critique dans leur code. En général, des contrôles d'autorisation au niveau de l'objet doivent être inclus pour chaque fonction qui accède à une source de données à l'aide d'une entrée de l'utilisateur.
Vous pensez les connaître déjà et pouvoir détecter, corriger et éliminer un bogue de contrôle d'accès dès maintenant ? Jouez au défi gamifié :
Comment t'es-tu débrouillé ? Si tu veux travailler sur ta partition, continue à lire !
Quels sont quelques exemples de vulnérabilités d'autorisation au niveau de l'objet non respectées ?
Les vulnérabilités de contrôle d'accès au niveau des objets permettent aux attaquants de prendre des mesures qu'ils ne devraient pas être autorisés à effectuer. Il peut s'agir d'une action qui devrait être réservée aux administrateurs, comme l'accès ou la visualisation de données sensibles, ou la destruction d'enregistrements. Dans un environnement hautement sécurisé, cela peut même signifier empêcher quiconque de consulter les enregistrements à moins d'y être spécifiquement autorisé.
Vous devez tenir compte de toutes les actions possibles lorsque vous définissez l'autorisation au niveau de l'objet. Par exemple, dans l'API Java Spring, un point de terminaison présentant un problème potentiel peut ressembler à ceci :
public boolean DeleteOrder (ID long) {
Ordre de commande = OrderRepository.getOne (id) ;
si (ordre == nul) {
log.info (« Ordre introuvable ») ;
renvoie faux ;
}
Utilisateur user = Order.getUser () ;
OrderRepository.delete (ordre) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
Le point de terminaison de l'API supprime les commandes par identifiant, mais ne vérifie pas si cette commande a été passée par l'utilisateur actuellement connecté. Cela représente une opportunité pour un attaquant d'exploiter cette faille et de supprimer les commandes des autres utilisateurs.
Pour que les restrictions d'accès sécurisé soient correctement mises en œuvre, le code devrait ressembler à ceci :
public boolean DeleteOrder (ID long) {
Utilisateur utilisateur = UserService.getUserByContext () ;
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
si (OrderExist) {
OrderRepository.deleteById (id) ;
log.info (« Supprimer la commande pour l'utilisateur {} », User.getId ()) ;
retourne vrai ;
} autre {
log.info (« Ordre introuvable ») ;
renvoie faux ;
Élimination des vulnérabilités liées à l'autorisation au niveau de l'objet
Le code de contrôle d'accès n'a pas besoin d'être trop compliqué. Dans le cas de notre exemple d'environnement d'API Java Spring, il est possible de résoudre ce problème en définissant précisément qui peut accéder aux objets.
Tout d'abord, un processus de vérification doit être mis en place afin d'identifier l'auteur de la demande :
Utilisateur utilisateur = UserService.getUserByContext () ;
Ensuite, nous devons nous assurer que l'identifiant de l'objet existe et qu'il appartient à l'utilisateur qui fait la demande :
booléen OrderExist = getUserOrders () .stream ()
.anyMatch (commande -> (Order.getId () == id)) ;
Et enfin, nous procédons à la suppression de l'objet :
OrderRepository.deleteById (id) ;
N'oubliez pas que vous devez vous assurer que la méthode d'autorisation de votre code est conforme aux politiques des utilisateurs et aux contrôles d'accès aux données de votre organisation. Afin de vous assurer que votre code est totalement sécurisé, vous devez vérifier que les utilisateurs disposant de différents niveaux d'autorisation ont accès aux données dont ils ont besoin pour effectuer leur travail, mais qu'ils ne peuvent pas consulter ou modifier tout ce qui devrait leur être réservé. Cela pourrait révéler des vulnérabilités de contrôle d'objets manquantes qui ont été accidentellement négligées.
Les principaux enseignements de ces exemples sont de définir d'abord toutes les actions qu'un utilisateur peut effectuer avec un objet, puis d'ajouter des contrôles d'accès puissants directement au code. Enfin, ne vous fiez jamais aux propriétés parentes héritées pour effectuer ce travail ou pour déléguer cette autorité à un autre endroit. Définissez plutôt les autorisations et les actions des utilisateurs dans le code de manière explicite pour chaque type d'objet à protéger.
Consultez le Secure Code Warrior pages de blog pour en savoir plus sur cette vulnérabilité et sur la manière de protéger votre organisation et vos clients des ravages causés par d'autres failles de sécurité. Vous pouvez également essayez une démo de la plateforme de formation Secure Code Warrior pour maintenir toutes vos compétences en cybersécurité à jour et à jour.
목차
마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 주기 전반에 걸쳐 코드를 안전하게 보호하고 사이버보안이 최우선 과제인 문화를 조성하도록 Secure Code Warrior . 애플리케이션 보안 담당자, 개발자, IT 보안 책임자 또는 보안 관련 업무에 종사하는 모든 분들을 위해, 저희는 귀사의 조직이 안전하지 않은 코드로 인한 위험을 줄일 수 있도록 돕습니다.
데모 예약하기Télécharger



%20(1).avif)
.avif)
