Le site a masqué les preuves de l’introduction du code non sécurisé
Il y a quelques jours, Andrew Torba, le fondateur du réseau social Gab, a déclaré que le réseau social Gab a été piraté, les données de l’ancien président Donald Trump faisant partie des données volées et rendues publiques par les cybercriminels. Andrew Torba a indiqué qu’un hacker, qui se fait appeler “JaXpArO and My Little Anonymous Revival Project“, a piraté la plateforme pour exposer les utilisateurs de Gab. Les messages privés de quelque 15 000 utilisateurs de Gab, les profils des utilisateurs, les mots de passe de certains utilisateurs et les mots de passe de groupes ont été dérobés. Les cybercriminels auraient utilisé une vulnérabilité d’injection SQL comme vecteur d’attaque.
« Mon compte et celui de Trump ont été compromis, bien sûr, car Trump est sur le point de s’exprimer », a écrit Torba dimanche alors que Trump s’apprêtait à prendre la parole à la conférence CPAC (Conservative Political Action Conference) en Floride. « Toute l’entreprise est mobilisée pour enquêter sur ce qui s’est passé et s’efforcer de retrouver la trace du problème et d’y remédier », a-t-il ajouté. Le groupe militant pour la transparence des données, Distributed Denial of Secrets (DDoSecrets), prévoit de partager les données avec les chercheurs et les journalistes, mais déclare qu’il ne les rend pas publiques pour des raisons de protection de la vie privée. « Dans un temps plus ordinaire, ce serait une ressource sociologique importante », a indiqué DDoSecrets sur son blog.
Ces fuites de données surviennent presque huit semaines après que des partisans de Trump aient pris d’assaut le Capitole. Les émeutiers ont pris des centaines de milliers de vidéos et de photos du siège et les ont mises en ligne. Les principaux sites de médias sociaux ont retiré une grande partie du contenu parce qu’il violait leurs conditions d’utilisation. « Les données de Gab sont un ensemble de données important mais compliqué », a écrit le personnel de DDoSecrets dans un billet. « En plus d’être un corpus du discours public sur Gab, il comprend également de nombreux messages privés. Dans un temps plus simple ou plus ordinaire, ce serait une ressource sociologique importante. En 2021, c’est aussi un registre de la culture et des déclarations exactes concernant non seulement une augmentation des opinions et des actions extrémistes, mais aussi une tentative de coup d’État ».
Gab a longtemps été accusé comme étant un refuge pour les discours haineux. Depuis l’attaque du Capitole, Gab a vu son trafic augmenter de 800 % et le nombre de ses utilisateurs enregistrés a doublé. La Ligue anti-diffamation a demandé une enquête sur Gab afin de déterminer « si la plateforme a intentionnellement aidé ou encouragé » les personnes impliquées dans l’émeute.
D’où pourrait provenir la faille ?
Des curieux ont tôt fait de s’intéresser au code. Selon des observateurs, un examen rapide du code open source de Gab montre que la vulnérabilité critique, ou au moins une très similaire, a été introduite par le directeur de la technologie de l’entreprise.
Le changement, qui dans le langage du développement logiciel est connu sous le nom de «git commit», a été effectué en février à partir du compte de Fosco Marotto, un ancien ingénieur logiciel de Facebook qui est devenu en novembre le directeur technologique de Gab. Lundi, Gab a supprimé le commit git de son site Web. Vous trouverez ci-dessous une image montrant le changement de logiciel de février, comme indiqué à partir d’un site qui fournit des snapshots de commits enregistrés.
@@ -7,7 +7,7 @@ class HomeFeed < Feed
@account = account
end
- def get(limit, max_id = nil, since_id = nil, min_id = nil)
+ def get(limit = 20, max_id = nil, since_id = nil, min_id = nil)
# if redis.exists?("account:#{@account.id}:regeneration")
from_database(limit, max_id, since_id, min_id)
# else
@@ -18,8 +18,33 @@ class HomeFeed < Feed
private
def from_database(limit, max_id, since_id, min_id)
- Status.as_home_timeline(@account)
- .paginate_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
- .reject { |status| FeedManager.instance.filter?(:home, status, @account.id) }
+ pagination_max = ""
+ pagination_min = ""
+ pagination_max = "and s.id < #{max_id}" unless max_id.nil?
+ pagination_min = "and s.id > #{min_id}" unless min_id.nil?
+ Status.find_by_sql "
+ select st.* from (
+ select s.*
+ from statuses s
+ where
+ s.created_at > NOW() - INTERVAL '7 days'
+ and s.reply is false
+ and (
+ s.account_id = #{@id}
+ or s.account_id in (select target_account_id from follows where account_id = #{@id})
+ )
+ and s.account_id not in (select target_account_id from mutes where account_id = #{@id})
+ #{pagination_max}
+ #{pagination_min}
+ order by s.created_at desc
+ limit #{limit}
+ ) st
+ left join custom_filters cf
+ on cf.account_id = #{@id} and st.text not like '%' || cf.phrase || '%'
+ where cf.id is null
+ "
+ # .reject { |status| FeedManager.instance.filter?(:home, status, @account.id) }
+ # Status.as_home_timeline(@account)
+ # .paginate_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id)
end
end
Le commit montre un développeur de logiciel utilisant le nom de Fosco Marotto introduisant précisément le type d’erreur de débutant qui pourrait conduire au type de violation signalée ce week-end. Plus précisément, la ligne 23 supprime du code reject et filter, qui sont des fonctions API qui implémentent un idiome de programmation qui protège contre les attaques par injection SQL.
Cet idiome permet aux développeurs de composer une requête SQL d’une manière sûre qui « nettoie » les entrées que les visiteurs du site Web saisissent dans les champs de recherche et autres champs Web pour s’assurer que toutes les commandes malveillantes sont supprimées avant que le texte ne soit transmis aux serveurs principaux. À leur place, le développeur a ajouté un appel à la fonction Rails qui contient la méthode find_by_sql, qui accepte les entrées non traitées directement dans une chaîne de requête. Rails est une boîte à outils de développement de sites Web largement utilisée.
« La documentation de Sadly Rails ne vous avertit pas de cet écueil, mais si vous savez quoi que ce soit sur l’utilisation des bases de données SQL dans les applications Web, vous auriez entendu parler de l’injection SQL, et il n’est pas difficile de trouver des avertissements indiquant que la méthode find_by_sql n’est pas sûr », a écrit Dmitry Borodaenko, un ancien ingénieur de production chez Facebook qui figure parmi les curieux ayant analysé le code. « Il n’est pas confirmé à 100% qu’il s’agit de la vulnérabilité qui a été utilisée dans la violation de données Gab, mais cela aurait certainement pu l’être, et ce changement de code est annulé dans le dernier commit qui était présent dans leur référentiel GitLab avant qu’ils ne le mettent hors ligne ».
Ironiquement, Fosco en 2012 a conseillé aux développeurs d’utiliser des requêtes paramétrées pour éviter les vulnérabilités d’injection SQL.
Outre le fait que le commit soulève des questions sur le processus de Gab pour développer un code sécurisé, le site de médias sociaux fait également face à des critiques pour avoir supprimé les commits de son site Web. Les critiques affirment que cette décision viole les termes de la licence publique générale Affero, qui régit la réutilisation par Gab de Mastodon, un progiciel open source pour l’hébergement de plates-formes de réseaux sociaux.
Les critiques disent que la suppression enfreint les termes qui exigent que le code source forké soit montré sur le site. Les exigences visent à assurer la transparence et à permettre à d’autres développeurs open source de bénéficier du travail de leurs pairs chez Gab.
Gab avait longtemps fourni des commits sur https://code.gab.com/. Puis, lundi, le site a soudainement supprimé tous les commits, y compris ceux qui ont créé puis corrigé la vulnérabilité critique d’injection SQL. À leur place, Gab a fourni le code source sous la forme d’un fichier d’archive Zip qui était protégé par le mot de passe «JesusChristIsKingTrumpWonTheElection» (moins les guillemets).
Outre les questions sur le codage sécurisé et la conformité des licences, les commits Gab git semblent également montrer que les développeurs de l’entreprise ont du mal à corriger leur code vulnérable.
Les participants à la discussion répondent en soulignant sarcastiquement la difficulté que le développeur semblait avoir. Nous pouvons lire par exemple : « désolé, ne pas dire où se trouve encore le SQLi, peut-être devriez-vous appeler un exorciste pour le comprendre XDDDDDD ».
La faille de sécurité de Gab et la gestion en coulisse du code avant et après l’incident fournissent une étude de cas pour les développeurs sur la façon de ne pas maintenir la sécurité et la transparence du code d’un site Web. La leçon est d’autant plus importante que pour le commit le compte du directeur technique de Gab a été utilisé, lui qui, parmi tous les autres, aurait dû être mieux informé.
source : developpez