Pour s'inscrire, il nous faut nom, prénom et email. Et un mot de passe. Bon déjà on comprend que la blockchain ne sera pas utilisé pour l'identité. Vérification de l'email à l'inscription
Bon après pour se logger, l'application envoie en clair le mot de passe. On espère que le serveur ne mémorise pas les mots de passes en clair dans sa base de donnée !?
Gentil le serveur nous revois quand même le hash du mot de passe, parce que on n'était pas assez grand pour le calculer... bon ca rassure un peu, ils ont la capacité de stocker seulement le mot de passe hashé/salé sur le serveur...
D'ailleurs le hash $2a$10 nous indique qu'il s'agit de l'algo bcrypt avec les paramètres par défaut, mais ce n'est pas la dernière version de la librarie (préfixe $2b, voir ici github.com/kelektiv/node.…)
on regarde d'un peu plus près, on est bloqué par un popup qui nous force à faire un KYC, ou bien de se déconnecter.
On va donc contourner tout cela, en supprimant le popup, évidemment !
Rien de plus simple: click droit, inspection de la page et on clique 'supprimer l'élément'
nous voici donc dans l'interface après avoir détourner KYC.
Attention cela ne veut pas dire que nous allons pouvoir voter, mais nous pouvons aller plus loin pour examiner l'interface
Nous avons donc la possibilité de consulter le vote en cours et les paramètres de comptes.
Déjà regardons les appels API. Tiens, tiens, un truc intéressant, nous avons le nombre de vote en temps réels !
rhoo, en plus l'API n'est pas protégée, donc tout le monde peut suivre celà. Bon on peut dire que c'est de la transparence :) mais en général, ce genre d'info est confidentiel avant la fin du vote.
Allez on est joueur, essayons de changer les paramètres de l'API en replacant 2 par 1, nous avons la ville de Capet apinode.avosvotes.com/consultationAc… 37 votes, et Vernouillet avec 165 votes (id = 3)
bon j'espère qu'il ne s'agit pas d'une ville fantôme histoire de truquer les votes avec des votants virtuels hein!
Bon voilà je viens de trouver une grosse vulnérabilité, je ne peux pas la rendre publique, car elle risque de mettre en danger le système. Je préviens les personnes concernées.
si quelqu'un de chez @avosvotes peut me contacter....
on essaye comme tout à l'heure d'autres appels ? ca marche. Bon après rien de super confidentiel, mais bon je vais pas essayer une attaque DOS, mais vu le temps que certains appels mettent...
genre çà (je ne mets pas en clair l'appel)
J'essaye de voter mais je reçoit un message 'null'.
A priori les votes sont vérifiés côté serveurs
Bon grosse faille, je récupère la liste des votes... Allez hop ce n'est que la 3eme ou 4eme faille, mais là c'est grave. Un petit email s'impose
bon on trouve une API cachée aussi, c'est pas beau... merci @fs0c131y pour le hint! Ca fait la 5ème vulnérabilité. Je partage le reward, promis :)
mais ce que je peux déjà dire c'est qu'en se basant sur le vote électronique, il y a déjà un clair vainqueur 456 contre 112
Allez voter, il reste encore 4 jours
bon je prend un café et un sandwich, j'ai besoin de recharge :)
De retour.
Je laisse de côté la partie front, je me concentre sur la partie blockchain.
L'intérêt de la 'blockchain' qui est envisagé, c'est d'enregistré les votes de façons non modifiables. Il y a plein de challenges, notamment éviter ce qu'on appelle la fuite de metadata qui donnerait des infos sur qui, quand, comment. En gros il faut pouvoir préserver l'anonymat
si on reprend l'historique de ce 'smart-contract' vote (appelons le comme cela), on a ceci :
l'histoire commence le 28/09 quand le compte est reçoit des tezos de kraken. Je passe les détails (quelques tests pour être sûr que le propriétaire a bien la bonne clef privée).
On repère la création de 2 smarts contracts. Et le premier vote le 01/10 à 8h13m33s
Pardon ! on voit les votes ?! regardons de plus prêt. Voici le détail de la transaction.
Un point me chiffone. value = 1 j'ai déjà vu çà qqpart
Oula !
oui c'est bien ce que vous croyez, la value c'est le vote. l'autre étant la valeur 5....
Vous pouvez donc connaître vous aussi le résultat des votes en comptant tout simplement le nombre de tx avec valeur 5 ou 1. Je laisse au lecteur les devoirs pour savoir si Pour = 1 ou 5
regardons plus en détails. Le storage du premier smart contract est ici tzkt.io/KT1TzZ4CwKiukb…
bon pudiquement appelé myParameter1 et myParameter2, on doit faire face à un test, passons au suivant...
Bon si vous avez compté à la main le nombre de votes, ben désolé pour vous, le smart contract le fait pour vous
plot twist : le smart contract ne sert à rien lui non plus, il sert juste à compter le nombre de votes et stocke... le dernier vote !?
A part changer les règles du jeux, je ne vois pas à quoi cela sert ? peut-être l'envie du développeur de faire un dashboard sur blockchain ?
autre informations, en comparant le nombre de votes, il s'agit manifestement uniquement des votes de Verneuils. Les autres localités n'y sont pas. Pas de vérification blockchain pour eux donc !
Je constate que l'équipe à réagit, et a supprimé le nombre de votes de l'API. Bon il reste plus qu'a le supprimer du smart contract et de la blockchain...
Wait !?
bon c'est vrai il va falloir se farcir désormais le nombre de vois pour et le nombre de vois contre !
Je découvre un 3eme smartcontract créé le 3 octobre, identique au 2eme, mais jamais appelé tzkt.io/KT1CeLuUxpZKNF…
Un fat finger j'imagine
Imaginons un jour un système de vote comme çà pour les présidentielles et qu'on voit en temps réels que @MLP_officiel devance @EmmanuelMacron de quelques milliers de voix et que le 3eme est loin derrière.
Regardons du côté de la mempool, c'est à dire des transactions coincées dans les lymbes qui n'arrivent pas sur la blockchain.
Oulah, 5 transactions de votes à l'heure actuelle, coincée (car invalide) services.tzkt.io/v1/mempool/tz1…
4 vote "1" et 1 vote "5"
L'histoire ne dit pas si ils vont être forcé manuellement avec un nouvelle transaction.
Bon conseil aux devs, pensez à remplacer la preuve de vote discretos dans l'interface des utilisateurs conccernés !
Tant qu'on y est évitez de fatfingerer des votes en trop !
Bon en passant, l'explorer fournit contient un trackeur google.
Donc voilà, vous cliquez sur votre preuve et instantanément google associe votre IP à votre vote ! Bon après derrière tout y passe hein (compte email, vos profils sur les réseaux sociaux tout çà)
Bientôt facebook vous proposera de vous connecter avec les gens qui ont voté comme vous ! (je tiens à avoir la primauté pour le dépôt de brevet, merci)
En fait, la théorie de @elonmusk qui prédit que l'intelligence artificielle va bientôt dépasser l'intelligence humaine prend tout son sens aujourd'hui !
Mesdames et Messieurs, ce jour est arrivé !
Quelques statistiques à destination de cambridge analytica.
Le dimanche a bien cartonné en terme de votes électronique
voilà et pour les horaires de votes c'est par ici.
Si j'étais un parti impliqué, je glisse des notifications facebook le dimanche vers 11h ou 15h histoire de maximiser l'influence !
Voilà j'en ai terminé ajd. Je n'ai pas encore tout explorer, il y aurait tant de choses à dire. Mais encore une fois, il faut toujours faire attention sur le marché des applications de votes ! c'est loin d'être facile
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Je vous mets le code tel que pubblié sur la blockchain
C'est du code compilé donc pas très compréhensible pour le commun des mortels. Comme pour #ethereum le smart contract est un petit code. Tezos utilise notamment un language, michelson, qui est promu plus sécurisé qu'ethereum mais évidemment c'est important de l'auditer.
Passons rapidement que quand bien même elle respecterait toutes les garanties de vie privée (ce qui n'est pas le cas), l'application est inutile tant que la quasi totalité des français ne l'a pas installée. A moins de la rendre obligatoire donc...
En outre il faudrait pour être efficace que le moindre contact soit répertorié (le virus n'attend pas 15 minutes pour se transmettre). L'unique raison pour laquelle il y a cette tempo de 15 min est que votre batterie de téléphone serait complètement vidée en qqs heures