Bon après un café ce matin je me penche de près sur l'application de vote @avosvotes pour une consultation publique. Plus d'info ici : fr.cryptonews.com/news/verneuil-…
Essayons donc de nous rendre sur le site.

verneuil.avosvotes.com

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.

apinode.avosvotes.com/consultationAc…
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)
Soyons joueurs jusqu'au bout, on à même la ville VilleTest avec 4 votes, ahah, apinode.avosvotes.com/consultationAc…

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....
continuons sur autre chose que cette vulnérabilité. Il s'agit de 'sql injection'. Mais je n'en dirait pas plus

Explorons l'interface
l'API nous donne quelques nouvelles indications. il y aura plusieurs catégories de consultations : Ecologie, Culturel, Social, Jeunesse et Urbanisme.

La consultation actuelle est rangée dans la catégorie Ecologie.
Nous arrivons donc dans la page de la consulation en question, avec le formulaire de vote
un petit coup d'oeil dans l'API, ce n'est pas protégé non plus apinode.avosvotes.com/consultationAc…

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
voyons donc la blckchain.

tzkt.io/tz1bmrGR6z8RNE…
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...
le second est plus intéressant
tzkt.io/KT1Ly9NLfDb2DE…

Vous avez 2 variables nbVotes et storedValue

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.

Genre le vote utile direct au premier tour
#supprimonsLe2emeTour
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
 

Keep Current with fx thoorens

fx thoorens Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @fxthoorens

6 Oct
Après la journée d'hier exploitant les problématiques somme toute classiques de l'application de votes, penchons nous sur le smart-contract Tezos.

Auditons mes bons

Le smart contract est consultable à l'adresse tzkt.io/KT1Ly9NLfDb2DE…

Je vous mets le code tel que pubblié sur la blockchain Image
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.
Read 18 tweets
26 May
Vous voulez savoir pourquoi l'application #StopCovid ne sert à rien, est dangereuse, une perte de temps et un gaspillage d'argent public ?

Petit thread #StopStopCovid
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
Read 17 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!