web-dev-qa-db-fra.com

Examen de la sécurité: "L'utilisateur de l'en-tête HTTP a été défini sur (quelque chose)"

Nous avons eu une revue de sécurité effectuée de notre PHP Code et leur équipe l'a informée dans leur rapport (entre autres):

/appdir/ 

Details
The HTTP header user-agent has been set to \" . 

Request
GET /appdir/ HTTP/1.0 
Accept: */* 
User-Agent: \" 
Host: localhost 
Cookie: PHPSESSID=08rtvlq03bd9d57qor4abjg7q4 
Connection: Close 
Pragma: no-cache 

Response
HTTP/1.1 200 OK 
Date: Sat, 18 Dec 2010 09:35:40 GMT 
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_Perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.1 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Connection: close 
Content-Type: text/html

Cela compte-t-il que l'agent utilisateur HTTP Header peut être défini sur\"?

11
siliconpi

Injection dans l'agent utilisateur (ou référateur à ce sujet) La valeur peut être une menace potentielle de plusieurs manières, cependant si votre situation actuelle est en fait une La vulnérabilité est difficile à raconter sans regarder la plus grande image de votre système.

Je vois souvent des systèmes que d'une manière ou d'une autre utilisent l'agent utilisateur. Il est souvent utilisé pour stocker des informations sur le navigateur le plus utilisé et similaire. Parfois, les agents utilisateur appelés bots sont traités différemment. Il y a beaucoup de cas.

Injection

Il n'est pas rare de voir les attaques XSS essayées dans le champ Agent utilisateur. Par exemple, un site que je testais il y a quelque temps m'a présenté des morceaux d'informations sur moi-même.

La chose intéressante était que cela a suscité l'utilisateur de l'utilisateur. Lorsque j'ai injecté l'utilisateur-Agent 'FooBar"> <img src="javascript:alert('document.cookie')' Cela me l'a alerté.

Maintenant, pour tirer parti de cette attaque sur d'autres utilisateurs, le site avait également une page de statistique où il a présenté combien d'utilisateurs moyens par jour, ce que les navigateurs les plus courants étaient et ainsi de suite. Les chiffres semblaient être basés sur le nombre de demandes. Construire un script rapide qui a fait suffisamment de demandes avec mon XSS, mettez simplement mon agent utilisateur sur la liste des 100 top 100 et que le vecteur était maintenant persistant et travaillant contre d'autres utilisateurs

La même chose est possible pour l'injection SQL. Essayez de courir avec UserAgent Im Harmless";DROP TABLE users. Peut-être que vous cassez des systèmes.

sondage pour la vulnérabilité

Mélangez dans un/"comme dans l'exemple et voyez ce qui se passe. Peut-être que vous obtenez un message d'erreur ou quelque chose est arrivé ailleurs sur le site.

Vérification de ce qui se passe si vous utilisez un ancien agent utilisateur ou un agent d'utilisateur de moteur de recherche peut parfois être très utile. Parfois, il s'agit du seul moyen de déverrouiller une partie du contenu sur le site et de rechercher ce contenu pour les vulnérabilités.

En utilisant par exemple Burpsuite Ce dernier est très facile à automatiser, puis parcourez rapidement toutes les demandes de récits pour les différences.

Edit: Dans votre exemple spécifique, il semble que le client effectuant la demande a défini l'agent utilisateur sur\". Si cela est intentionnellement, un bogue ou Juste que quelqu'un cache son agent utilisateur est difficile à raconter, mais je vais certainement examiner d'autres demandes de cet utilisateur.

9
Chris Dale

Je ne vois pas comment insérer une guillemette évasée dans la chaîne d'agent utilisateur est une vulnérabilité.

Je ne suis pas certain que c'est le cas, je pense que plus d'informations sont nécessaires. La seule chose à laquelle je puisse penser, c'est qu'ils exposent éventuellement un potentiel de détournement de session.

Fondamentalement, phpsessid = 08RTVLQ03BD9D57QOR4ABJG7Q4 appartient à une session d'utilisateur différente, ils utilisent cet identifiant de session via un cookie et obtiennent une réponse normale, même si l'agent utilisateur a changé de l'utilisateur d'origine.

Clarification:

L'utilisateur a ouvert le site Web, en utilisant la chaîne d'agent utilisateur suivante:

Mozilla Compatible (MSIE)

L'utilisateur A est ensuite attribué à l'ID de session suivant:

08rtvlq03bd9d57qor4abjg7q4

L'utilisateur B (mauvais gars) envoie ensuite une demande au serveur à l'aide d'un cookie avec le même identifiant de session dans son cookie, mais leur chaîne d'agent utilisateur est la suivante:

\"

Votre demande devrait alors se rendre compte que ce n'est pas le même utilisateur et détruire la session.

Je ne suis nullement certaine que c'est la situation, ni la surveillance de l'agent utilisateur empêche un détournement de la session, car les agents utilisateur sont facilement blanchis, mais c'est le seul potentiel que je vois ici.

10
Purge

La réponse est simple. N'incluez pas les valeurs d'en-tête passées dans la demande dans le contenu de votre réponse sans le nettoyer pour la première fois. Pour cette affaire, n'utilisez jamais aucun utilisateur fourni des données fournies par l'utilisateur sans le nettoyer. Toujours désinfecter des entrées.

Si vous n'incluez pas les valeurs d'en-tête passés par le client dans votre contenu, vous pouvez ignorer cet avertissement.

2
bahamat

Vous devez examiner votre spécification fonctionnelle si elles vous indiquent de valider les champs d'en-tête.

Votre spécification fonctionnelle doit définir ce qui est un comportement admissible. Cela pourrait définir tous les agents utilisateur tels que acceptables auquel cas vous devez l'accepter. Sachez que les données d'en-tête, comme toutes les données soumises par l'utilisateur, sont potentiellement dangereuses.

1
Bradley Kreider