View Issue Details

IDProjectCategoryView StatusLast Update
14629Bug reports[All Projects] Securitypublic2019-03-11 17:04
ReporterpnewebAssigned To 
PrioritynoneSeverityminor 
Status newResolutionopen 
Product Version3.16.x 
Target VersionFixed in Version 
Summary14629: Sécurisation de kcfinder derrière un (des) reverse proxy
Description

Le composant kcfinder utilisé par LS (dans third_party) intègre un dispositif de sécurisation consistant à mémoriser l'adresse IP et le user_agent eb début de session puis à contrôler qu'ils ne varient pas d'une requête à l'autre, ce qui révélerait un vol de session.

Ce dispositif est inopérant lorsque limesurvey est installé derrière un reverse proxy : l'adresse IP prise en compte est celle du reverse proxy donc elle est la même pour toutes les requêtes. Donc un hacker ayant pu usurper la session, et utilisant le même user_agent, est considéré comme utilisateur légitime.

Si au lieu d'un reverse proxy on a une ferme de plusieurs reverse proxy en répartition de charge, on a non seulement un défaut de sécurisation, mais en plus les requêtes provenant de l'utilisateur légitime peuvent être refusées : En effet, le dispositif de sécurisation mémorise alors l'adresse IP du reverse proxy utilisé au premier appel et rejette ensuite toutes les requêtes provenant des autres reverse proxy de la ferme.

Steps To Reproduce

Il suffit d'accéder au module de téléversement de fichier sur une instance LS installée derrière une ferme d'au moins 2 reverse proxy pour constater que le téléversement dysfonctionne de façon apparemment aléatoire : affichage d'un message "Erreur inconnue".

Additional Information

Nous avons résolu ce problème en modifiant le fichier third_party/kcfinder/core/class/uploader.php, ligne 155 :
dans stamp['ip'],
au lieu de mettre systématiquement : $_SERVER['REMOTE_ADDR']
nous mettons ;
isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])) : $_SERVER['REMOTE_ADDR']

Autrement dit, si on est derrière un RP, on ne prend pas l'adresse IP du RP mais celle du client immédiat du RP.

TagsNo tags attached.
Complete LimeSurvey version number (& build)3.16.0 mais présent depuis au moins la v2.73.0
I will donate to the project if issue is resolvedNo
Browsern'importe
Database & DB-Versionmysql 5.5
Server OS (if known)debian
Webserver software & version (if known)apache 2.4
PHP Version5.6

Activities

There are no notes attached to this issue.

Issue History

Date Modified Username Field Change
2019-03-11 17:04 pneweb New Issue