Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  XML Injection dans une requête soap

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XML Injection dans une requête soap

n°1878374
rohrix
Posté le 27-04-2009 à 16:44:36  profilanswer
 

Bonjour,
 
J'ai un problème avec les web services en Java.
 
J'ai créé ce web service:
 
1. Interface du web service

Code :
  1. @WebService (name="MyWebService" )
  2. @SOAPBinding (style=Style.RPC)
  3. public interface MyWebService {
  4.    
  5.      @WebMethod
  6.      public String doLogin(@WebParam (name="lastname" ) String lastname,
  7.             @WebParam (name="firstname" ) String firstname,
  8.             @WebParam (name="password" ) String password);
  9.      // ... other methods ...
  10. }


2. Enpoint du web service

Code :
  1. @Stateless
  2. @WebService(
  3.     endpointInterface = "webservice.MyWebService",
  4.     portName = "MyWebServicePort",
  5.     serviceName = "MyWebService" )
  6. public class MyWebServiceEndpoint implements MyWebService {
  7.  
  8.    public String doLogin(String lastname, String firstname, String password) {
  9.        createLogin(lastname, firstname, password);     
  10.    }         
  11.    // ... implementation of other methods ...
  12. }


Je déploie ensuite mon application EAR sur Sun Java Application Server (ou Bea weblogic ça change rien), le déploiement se déroule correctement et j'utilise SoapUI pour tester les méthodes de mon web service, tout fonctionne correctement, [B]là où est mon problème est que je peux faire un XML injection (ou Tag injection) avec ma requête soap.[/B]
 
Si je prend l'exemple ci-dessous, on peut voir ma requête soap qui est envoyé à mon serveur depuis SoapUI.

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="web:">
  2.    <soapenv:Header>
  3.    </soapenv:Header>
  4.    <soapenv:Body>
  5.       <web1:doLogin xmlns:web1="http://webservice.example.com/">
  6.            <firstname>John</firstname>
  7.            <lastname>Brown</lastname>
  8.            <password>john_pass33</password>
  9.            [B]<lastname>Kennedy</lastname>[/B]
  10.       </web1:doLogin>
  11.    </soapenv:Body>
  12. </soapenv:Envelope>


Comme vous pouvez le constater j'ai réussi à injecter 2 tags <lastname>, mon serveur accepte cela et prend en compte le 2ème tag, c'est-à-dire dans cette exemple le nom "Kennedy" sera utilisé et non pas le nom "Brown".  
J'ai essayé d'utiliser des XML schema mais rien ne change j'ai toujours la possibilité d'envoyer une requête avec 2 tags de même nom et c'est toujours le dernier tag qui est pris en compte par le serveur.
 
Je voudrais donc savoir si quelqu'un pouvait m'aider en me disant comment il est possible de ne plus avoir ce genre de problème, c'est-à-dire qu'il ne soit plus possible de créer une requête soap avec 2 même nom comme paramètre ou d'ignorer le 2ème tag, etc ???
 
Merci d'avance.


Message édité par rohrix le 27-04-2009 à 16:52:55
mood
Publicité
Posté le 27-04-2009 à 16:44:36  profilanswer
 

n°1879044
bugsan
Posté le 29-04-2009 à 04:32:33  profilanswer
 

Qu'est ce que tu appelles un XML injection ?
 
Tu as envoyé toute la requête tel quel, non ?

n°1879152
rohrix
Posté le 29-04-2009 à 11:33:52  profilanswer
 

bugsan a écrit :

Qu'est ce que tu appelles un XML injection ?
 
Tu as envoyé toute la requête tel quel, non ?


Oui j'ai envoyé la requête tel quel (en fait c'est un copier-coller depuis SoapUI), et comme tu peux le voir dans le requête ci-dessous j'ai envoyé 2 tags <lastname> (ligne 7 et ligne 9) c'est ça que j'appelle "XML Injection" ou si tu préfères "Tag Injection". Le serveur accepte ma requête et prend en compte le 2ème Tag et ignore le premier. Ce que je veux c'est que le serveur n'accepte pas une telle requête. Et comme je l'ai dit j'ai essayé de créer un XML Schema mais ça change rien à mon problème, donc je suis un peu dans une impasse.

Code :
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="web:">
  2.     <soapenv:Header>
  3.     </soapenv:Header>
  4.     <soapenv:Body>
  5.        <web1:doLogin xmlns:web1="http://webservice.example.com/">
  6.             <firstname>John</firstname>
  7.             <lastname>Brown</lastname>
  8.             <password>john_pass33</password>
  9.             <lastname>Kennedy</lastname>
  10.        </web1:doLogin>
  11.     </soapenv:Body>
  12. </soapenv:Envelope>


Est-ce que tu as une idée ?? Ou quelqu'un d'autre peut m'aider ?? Merci !


Message édité par rohrix le 29-04-2009 à 11:34:35
n°1879485
bugsan
Posté le 29-04-2009 à 19:32:04  profilanswer
 

Ce n'est pas du tout de l'injection de tags, puisque tu envoies toute la requête en entier.
Et il n'y a pas non plus de problème de sécurité.
 
Si tu veux rendre plus strict le format XML, tu peux jouer sur le schéma XSD (xsd:sequence, et xsd:element avec maxOccurs=1).
Mais encore faut il que le framework de webservice que tu utilises supporte la validation XSD.

n°1879586
rohrix
Posté le 30-04-2009 à 09:22:27  profilanswer
 

bugsan a écrit :

Ce n'est pas du tout de l'injection de tags, puisque tu envoies toute la requête en entier.
Et il n'y a pas non plus de problème de sécurité.
 
Si tu veux rendre plus strict le format XML, tu peux jouer sur le schéma XSD (xsd:sequence, et xsd:element avec maxOccurs=1).
Mais encore faut il que le framework de webservice que tu utilises supporte la validation XSD.


 
Oui je suis d'accord avec toi, mais j'envoie toute la requête comme example pour que tout le monde puisse comprendre mon problème, maintenant si une telle requête est possible il est également possible d'injecter un tag dans une requête soap qui est intercepté et le serveur n'y verra que du feu et prendra en compte le tag que tu as injecté, maintenant pour ne pas entré dans les détails de comment un attaqueur peut faire ça et tout compliquer, j'ai simplement donné un example de qu'est-ce que je veux résoudre comme problème.
 
pour plus d'info (sous tag injection): http://www.owasp.org/index.php/Tes [...] _Injection  --> donc ça existe quand même et c'est plus ou moins un problème
 
Bref on va pas débattre plus longtemps sur le sujet surtout que je suis de ton avis que je pense pas que ce soit un gros problème de securité mais si il est possible de trouver une solution je serais quand même super content.
 
Ensuite ce que tu as dit avec les schemas XSD c'est exactement ce que j'ai fait avec maxOccurs=1 mais justement ça a rien changé à mon problème mais maintenant ce que tu dis avec le framework de web service est vraiment interessant, c'est vrai qu'il ne supporte peut-être pas la validation XSD (parce que je suis à peu prêt sur que mon XSD est correct) mais maintenant est-ce que tu sais comment on peut vérifier cela ?? Et connaîs-tu un example ou ce "tag injection" n'est plus possible ??
 
Merci


Message édité par rohrix le 30-04-2009 à 09:22:40
n°1879911
bugsan
Posté le 30-04-2009 à 19:03:36  profilanswer
 

L'exemple que tu donnes (ton lien) consiste en une injection dans un fichier XML existant. Rien à voir avec des webservices XML.
 

n°1880009
rohrix
Posté le 01-05-2009 à 09:16:07  profilanswer
 

bugsan a écrit :

L'exemple que tu donnes (ton lien) consiste en une injection dans un fichier XML existant. Rien à voir avec des webservices XML.
 


Merci pour ta précision mais ça marche la même chose avec les web services et c'est également le même problème, les requêtes soap sont en XML, donc si tu as un problème (comme ici tag injection) avec un fichier XML tu l'as aussi avec les web services, la preuve ?? -> Mon example


Message édité par rohrix le 01-05-2009 à 09:16:41
n°1880049
bugsan
Posté le 01-05-2009 à 13:41:14  profilanswer
 

Citation :

ça marche la même chose avec les web services


Non.

Citation :

... c'est également le même problème, les requêtes soap sont en XML, donc ...


Non.

Citation :

si tu as un problème avec un fichier XML tu l'as aussi avec les web services


Non.
 
Réfléchit deux secondes, quel est la différence entre ca
 

Code :
  1. <lastname>Brown</lastname>
  2. <password>john_pass33</password>
  3. <lastname>Kennedy</lastname>


 
et ca
 

Code :
  1. <lastname>Kennedy</lastname>
  2. <password>john_pass33</password>


 
Aucune.
Si je veux faire passer la valeur Kennedy, j'ai juste à mettre Kennedy dans le bon tag. C'est un "Service", par définition ...


Message édité par bugsan le 01-05-2009 à 13:46:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  XML Injection dans une requête soap

 

Sujets relatifs
Requête sur plusieurs tables avec un nombre de champs différentUtilisation de XML comme base de donnnée
Aide pour réaliser une requetefopen - requete http externe : erreur de connexion (serveur dédié)
affichage XML dans mailaffichage XML dans mail
PageFlip + fichier XML :sWebService et SOAP
AS3 et XmL : écriture de donnéesIntégré le résultat d'une requête access dans un mail en corp de texte
Plus de sujets relatifs à : XML Injection dans une requête soap


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR