Vous êtes embauché pour corriger un petit bogue pour un site exigeant de la sécurité. En regardant le code, il est rempli de failles de sécurité. Que faire? [fermé]


109

J'ai été embauché par quelqu'un pour effectuer de petits travaux sur un site. C'est un site pour une grande entreprise. Il contient des données très sensibles, la sécurité est donc très importante. Lors de l'analyse du code, j'ai remarqué qu'il était rempli de failles de sécurité: de nombreux fichiers PHP lisant directement les entrées / sorties des utilisateurs dans les requêtes mysql et les commandes système.

Le problème est que la personne qui a créé le site pour lui est un programmeur avec sa famille et ses enfants qui dépendent de ce travail. Je ne peux pas simplement dire: "votre site est un parc d'attractions pour enfants script. Laissez-moi le refaire pour vous et tout ira bien."

Que feriez-vous dans cette situation?

Mise à jour:

J'ai suivi quelques bons conseils ici et ai rapporté poliment au développeur que j'avais découvert quelques failles de sécurité sur le site. J'ai souligné la ligne et dit qu'il pourrait y avoir une vulnérabilité possible pour les attaques d'injection SQL là-bas, et a demandé s'il était au courant. Il a répondu: "Bien sûr, mais je pense que pour l'exploiter, l'attaquant devrait avoir des informations sur la structure de la base de données; je dois mieux comprendre" .

Mise à jour 2:

J'ai dit que ce n'était pas toujours le cas et lui ai suggéré de suivre ce lien de question Stack Overflow afin de le traiter correctement: Comment empêcher l'injection SQL en PHP? Il a dit qu'il l'étudierait et m'a remercié de le lui avoir dit auparavant. Je suppose que ma part est terminée, merci les gars.


29
J'aimerais vraiment une solution qui n'implique pas de ruiner la vie de quelqu'un. Je laisserais cela seul, mais je sais aussi qu'un tel trou de sécurité pourrait aussi ruiner la vie de certaines personnes. Compliqué.
MaiaVictor

18
L’attaquant pourrait utiliser cet exploit pour obtenir des informations sur la structure de la base de données. Aucune vulnérabilité d'injection SQL ne devrait jamais être minimisée.
Dave Rager

17
Montrez-lui comment exploiter une vulnérabilité sans utiliser la moindre connaissance de la base de données. Cela l'effrayera.
Euphoric

74
Je veux juste dire bon travail pour rechercher une autre personne / programmeur que vous ne connaissez pas. Cela ne fait pas moins une chose terrible de ruiner leurs moyens de subsistance parce qu'ils ont commis une erreur et que vous ne les connaissez pas, et je vous félicite de l'avoir prise en compte.
Acier

8
@Dokkat Le problème est celui de l'équilibre. Du point de vue du programmeur, le programmeur de mauvaise qualité avec une femme et son enfant a effectivement mis en danger la société et donc les emplois de nombreux employés avec des femmes et des enfants. De plus, le problème émotionnel complique souvent le problème. "Un mauvais programmeur me rend la vie plus difficile. Je dois maintenant passer à côté de ma famille. Ils sont plus importants pour moi que lui. Cela semble injuste. " C'est une réponse irrationnelle, mais soyez des gens.
deworde

Réponses:


114

Tout d’abord, la priorité est de combler les failles de sécurité.

Si vous travaillez directement avec l'ingénieur qui a écrit ceci, documentez tout et donnez-le à cet ingénieur.

Sinon, informez votre employeur que les problèmes de sécurité sont plus importants que prévu initialement et que le site nécessite beaucoup de travail. Demandez à travailler avec le développeur principal qui se trouve sur le site et proposez-lui de vous renseigner sur la sécurité PHP (ne promettez pas de faire de la personne un expert, mais proposez de la former à tout ce que vous savez) pour que cette personne puisse en prendre le contrôle. après que vous avez terminé.

Ne faites pas de ceci un problème "ce type est mauvais, virez-le". "Hé, j’ai trouvé quelques bugs potentiels à corriger, qui semblent provenir d’ignorances / idées fausses sur la sécurité des sites. J'aimerais également parler de votre développement afin que nous puissions améliorer votre site. et, espérons-le, éviter d'autres problèmes à l'avenir. "


1
Excellentes réponses dans l'ensemble. Le sujet est subjectif, je vais donc marquer le vôtre, car il était le plus accepté par la communauté.
MaiaVictor

1
Si vous travaillez AVEC l’ingénieur, mais que vous êtes rémunéré par la direction, ne devriez-vous pas rendre compte à la direction? Que se passe-t-il si l'ingénieur vous remercie, mais le moment où vous partez détruit le rapport?
Konerak

Informez les deux, ou informez-en d'abord l'ingénieur, et vérifiez que des bogues sont créés et suivis dans le système utilisé. Si des bugs ne sont pas créés, informez-en la direction.
Eric Hydrick

2
J'ai mieux aimé cette réponse: programmers.stackexchange.com/a/189206/28351 , car pour l'employeur les priorités sont différentes. Commencez par signaler les failles de sécurité, puis corrigez le petit bogue.
2014

80

Il y a une différence entre l'ignorance et l'incompétence. Il fut un temps où vous ne saviez pas non plus ce qu'était une injection SQL, et il n'y avait aucune raison de croire que le programmeur d'origine ne soit pas capable de résoudre les problèmes une fois qu'il en a été informé.

Alors dis leur. Soyez spécifique et objectif, et rendez-vous disponible pour répondre aux questions, fournir des exemples d'exploits et des recommandations de correctifs. S'ils ne l'obtiennent toujours pas après ce délai, vous ne pouvez au mieux que ne pas mettre vos informations personnelles sur le site.


26
+1 L'ignorance peut être corrigée. L'incompétence est une carrière pour certains!
Mitch Wheat

20

Votre travail ne consiste pas à refaire le site pour lui. C'est pour corriger le petit bug. Toutefois, si vous avez remarqué des problèmes de sécurité qui devraient être résolus, vous pouvez les contacter avec le propriétaire du site et leur donner une idée du problème.

Ne blâmez pas le développeur d'origine et ne lui parlez pas négativement, et ne commentez pas à quel point le code est horrible. Soyez respectueux et professionnel. Vous pouvez proposer de travailler avec le développeur pour résoudre les problèmes. N'essayez pas de résoudre le problème vous-même ou d'offrir une solution à moins que vous n'ayez contracté un contrat pour résoudre le problème. S'ils suivent vos conseils et que vous vous trompez, ils pourraient vous revenir.


17

D'abord et avant tout, corrigez le problème pour lequel ils vous ont embauché. Si vous ne le faites pas, vous serez alors perçu comme le type de consultant intéressé à faire plus de travail pour lui-même, plutôt que de le faire.

En plus des correctifs, vous devez leur fournir une liste des problèmes que vous avez remarqués du point de vue de la sécurité et des raisons pour lesquelles ces problèmes sont incorrects.


13

Cela ne servira à personne de ne pas signaler les problèmes. Si vous aviez une tâche spécifique pour laquelle vous avez été embauché, documentez les autres problèmes de sécurité tels que vous les avez vus et signalez-les à la personne appropriée, probablement la personne à laquelle vous vous rapportez pour la tâche pour laquelle vous avez été embauché.

C’est une situation dans laquelle de fortes compétences non techniques s’avéreront utiles car, pour y faire face avec tact, il ne faudra pas mettre le travail effectué par d’autres personnes sur le site et ne pas laisser le développeur avoir l’impression que vous remettez en question son talent.

Évitez évidemment les mots tels que "merde, mauvais, pauvre, criblé" lorsque vous vous référez au code / défauts et mots similaires du développeur qui a écrit le site.


4
J'ajouterais: assurez-vous que le développeur est conscient de la gravité des failles et de la façon dont elles peuvent être exploitées. Prendre le temps de lancer une "attaque" contrôlée sur une machine locale en présence de ce développeur pourrait faire beaucoup pour le sensibiliser au problème, ce qui vous laissera la possibilité de suggérer des moyens de renforcer le code.
Andrew Gray

7

En plus des autres réponses, vous voudrez peut-être indiquer au développeur quelques ressources sur la facilité avec laquelle les problèmes d'injection SQL peuvent être exploités, par exemple sqlmap qui est un outil d'exploitation automatisé par injection SQL.

Ce que j’ai trouvé efficace pour démontrer la gravité de ce type de problème dans le passé, c’est de montrer ce que l’on peut en faire, alors si vous dirigez quelque chose comme ça contre un développeur. Une copie du site pour le montrer en extrayant des données, etc. vous pourriez les convaincre du sérieux.


4
Sachez que cela comporte certains risques, dans la mesure où vous pouvez être amené à ressembler à un "pirate informatique". Les cadres ne comprennent pas nécessairement des termes tels que "vulnérabilité existante", "copie de développement" et "analyste de la sécurité avec chapeau blanc"
deworde

0

Premier et unique; La direction ne veut pas entendre parler de problèmes. Je me suis fait virer du Bureau de la gestion du personnel (autorisations de sécurité de la maison blanche) parce que j'avais souligné le manque de sécurité de leur système. C'était il y a longtemps, mais l'attitude de la direction n'a pas changé.

Abordez le problème avec le développeur, par courrier électronique pour vous laisser une trace, puis marchez ou fuyez. Quand ils auront éventuellement un problème, en tant qu'entrepreneur, ils essaieront de vous blâmer, peu importe leur implication, même si elle est liée au problème à distance.

Avoir un problème aussi fondamental qu’une injection SQL, indique qu’ils étaient bon marché lorsqu’ils ont initialement développé le système, et qu’ils sont au mieux économiques aujourd’hui. Obtenez ce que vous pouvez d'eux quand ils sont encore en affaires, mais cherchez le développement commercial ailleurs.


3
« La direction ne veut pas entendre parler de problèmes » - ajouter quelques références / raisonnement à l' appui de votre affirmation (qui semble plausible pour moi , mais cela ne compte pas vraiment) et je révoquera downvote
moucheron
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.