5 points par GN⁺ 5 시간 전 | 1 commentaires | Partager sur WhatsApp
  • En 2021, à cause d’un comportement semblant être une erreur temporaire de Reddit, les motifs de suppression anti-spam à l’échelle du site et des données internes d’évaluation, normalement masqués sous Removed: Auto dans Relay for reddit, ont été exposés
  • D’après le code d’archive public, les informations de suppression sont transmises via ban_info.banner, et Relay affichait banned_by=true de l’API sous la forme Auto ; le problème semble être apparu lorsque des motifs internes ont été placés dans ce même champ
  • Parmi les motifs exposés figuraient domain, spammit, banned user, shadowban, spamurai, etc. ; spamurai incluait notamment l’âge du compte, le karma, le nombre de signalements, le FAI, le domaine d’e-mail, le User-Agent, l’en-tête de langue, l’empreinte TLS, le referrer, jusqu’au score de l’API Perspective
  • Le score SPAM de Google Perspective API correspondait presque exactement aux valeurs des journaux de suppression de Reddit, et l’on a constaté des cas où le score variait fortement selon des propriétés comme l’ajout de quelques caractères, la substitution par des caractères cyrilliques, ou l’ignorance de la casse et des chiffres
  • L’anti-spam de Reddit semble être un système multigénérationnel mêlant des contrôles en Python 2.7, des règles Lua REV1/REV2, Snooron, ainsi que des outils d’OCR et de classification d’images ; en 2026, avec l’arrêt de Perspective API et l’évolution du spam à base de LLM, le risque de publication a été jugé plus faible

Les motifs de suppression révélés en 2021

  • Un utilisateur qui était modérateur sur Reddit a constaté en 2021, en recevant une notification de spam supprimé dans l’application Relay for reddit, des messages internes de l’anti-spam qui n’auraient normalement pas dû être visibles
  • Dans l’interface habituelle des modérateurs, une suppression automatique de spam s’affiche sous la forme Removed: Auto, mais à ce moment-là, les véritables motifs de suppression et des données internes apparaissaient en texte rouge
  • Le comportement est revenu à la normale environ une heure plus tard, et il ne reste comme traces que des captures d’écran prises à l’époque

La modération Reddit et la manière dont Auto est affiché

  • Dans les subreddits, c’est-à-dire les communautés de Reddit, les modérateurs communautaires s’occupent de la suppression des publications, du bannissement d’utilisateurs, de la gestion de la modmail, etc.
  • Les modérateurs peuvent voir qui a supprimé une publication ou un commentaire
    • Une suppression par un modérateur ordinaire s’affiche avec le nom du modérateur
    • Une suppression par AutoModerator s’affiche avec AutoModerator
    • Le filtre anti-spam global de Reddit ou une suppression par les administrateurs peuvent s’afficher avec Auto
  • Dans les journaux de modération, une suppression globale du site apparaît sous reddit ou Anti-Evil Operations

Le chemin de fuite vu à travers le code d’archive public

  • Reddit a publié son code source jusqu’en 2017, et ce code d’archive permet de retracer une partie du flux de traitement des suppressions
  • La fonction de suppression côté modérateur, POST_remove, appelle admintools.spam
    • moderator_banned distingue si l’auteur de la suppression est un modérateur ou un administrateur
    • banner enregistre le nom de l’utilisateur ayant effectué la suppression
  • get_mod_attributes exporte le ban_info d’un élément supprimé dans la réponse API
    • Si la suppression a été faite par un modérateur, la valeur de banner est renvoyée comme banned_by
    • Si elle a été faite par un administrateur, c’est True qui est renvoyé à la place du vrai nom
  • Dans le code décompilé de Relay for reddit, si bannedBy vaut "true", l’application l’affiche sous forme de chaîne Auto
  • Reddit avait aussi un chemin de code où, lors d’une soumission de lien, si un domaine interdit était détecté, une raison interne était placée dans le champ banner, par exemple banner = "domain (REASON)"
  • Le champ banner contenant ces motifs internes n’aurait normalement dû être visible que par les administrateurs du site, mais on suppose qu’une erreur sur un chemin de code similaire l’a exposé aux modérateurs

Catégories de motifs de suppression exposés

  • domain

    • La suppression basée sur le domaine est une catégorie également visible dans le code public
    • Dans la plupart des cas, elle apparaissait sous la forme Removed: domain (spam), mais certains cas comportaient aussi des notes plus précises
    • Il y a eu en 2012 un cas de suppression d’un domaine précis pour une expérience liée à du spam Tumblr
    • Des formulations comme le sexxxxy sex spam apparaissaient aussi comme motif de suppression
  • spammit

    • spammit semble être une catégorie qui analyse les publications et leur attribue un pourcentage de probabilité de spam
    • Les cas de suppression observés allaient d’un score de 39.71% à 98.19%
    • Dans ces subreddits, de nombreuses publications Imgur légitimes étaient elles aussi supprimées avec des scores de spam de 70 à 98 %, ce qui ne donnait pas l’impression d’une grande précision
  • Utilisateurs bannis et shadowban

    • On trouvait des suppressions du type Removed: banned user ou Removed: Reddit (banall performed)
    • Dans la plupart des cas, il s’agissait visiblement de publications de spam évidentes, comme des liens vers des services promotionnels
    • Les publications d’utilisateurs shadowban étaient affichées sous la forme Removed: Reddit (shadowban applied on date)
    • Le shadowban est un bannissement silencieux : l’utilisateur a l’impression de pouvoir continuer à publier, mais ses publications et commentaires ne sont visibles pour personne d’autre

Les données internes révélées par spamurai

  • spamurai est l’élément exposé qui contenait le plus de données internes
  • Dans des supports de présentation publics, Reddit indiquait utiliser « ML » pour Minsky et « Rules » pour Spamurai
  • Les motifs de suppression spamurai combinaient des règles simples et des dumps de données détaillés
    • Un nom semblant désigner un sous-système, echelon, apparaissait dans certaines suppressions liées à des mots-clés spécifiques
    • Il existait un cas de suppression lorsqu’un compte de moins de 30 minutes publiait un commentaire correspondant à des critères de spam
    • Des règles concrètes étaient visibles, comme du spam d’affiliation à des t-shirts jugé suspect, des commentaires ne contenant qu’une URL, ou des commentaires avec un score Perspective élevé
  • Éléments présents dans les dumps de données spamurai

    • link t3_... ou comment t1_... est un fullname ID Reddit
    • t1 désigne un commentaire
    • t2 désigne un utilisateur
    • t3 désigne une publication
    • t4 désigne un private message
    • t5 désigne un subreddit
    • La valeur perspective spam a été confirmée comme étant le score SPAM de Google Perspective API
    • Des données liées au compte étaient incluses
      • ancienneté du compte
      • score spammy
      • karma
      • nombre de signalements
      • domaine d’e-mail
      • FAI ou nom de l’organisation
    • Des données de connexion et d’environnement étaient aussi présentes
      • usage ou non de oauth.reddit.com
      • User-Agent
      • en-tête de langue LANG
      • referrer
      • RHS, qui semble être une empreinte de navigateur
      • une valeur semblant être une empreinte TLS
      • URL de miniature
      • contenu de la publication ou du commentaire
      • lien Reddit d’origine

Perspective API et possibilités de contournement

  • La valeur 0.12571795 perspective spam dans les journaux Reddit correspond pratiquement exactement au résultat d’un appel à l’attribut SPAM de la Perspective API
  • En appelant Perspective API avec le même texte, on obtenait 0.12571794, soit un écart de 0.00000001, assimilable à une erreur d’arrondi
  • Le format des scores montré dans la documentation de Perspective et des exemples cités par le CTO de Reddit sont aussi utilisés comme indices du recours de Reddit à Perspective
  • L’attribut SPAM de Perspective est un attribut expérimental destiné à la détection du spam, et non de la toxicité ; il est indiqué comme entraîné sur un jeu de données unique combinant des commentaires du New York Times et des données de modération
  • Depuis février 2026, il n’est plus possible de créer de nouveaux projets Perspective API sur Google Cloud, ce qui rend les nouveaux tests plus difficiles
  • Variations sensibles du score SPAM

    • Le score SPAM de Perspective pouvait beaucoup changer avec l’ajout de seulement quelques caractères
    • Puppygirl Consulting is the best way to grow your revenue obtenait 0.8638981
    • En ajoutant qp à la fin, le score tombait à 0.010811162
    • Les résultats semblent indiquer que les chiffres et la casse sont ignorés
    • Changer les chiffres d’un numéro de téléphone et la casse renvoyait le même score
    • Certains autres systèmes d’écriture étaient aussi traités avec le même score
    • Deux chaînes différentes en cyrillique recevaient le même score de 0.35077864
    • Dans Buy my product, remplacer le p latin par le р cyrillique faisait baisser le score de 0.6473346 à 0.4452748
    • En modifiant légèrement un message sur la base de l’API publique, il était peut-être possible d’échapper à l’un des principaux critères de jugement de spamurai

Prise en compte des signalements utilisateurs et des validations de modérateurs

  • spamurai semble également intégrer les signalements utilisateurs dans ses règles de suppression
  • Le motif REPORT: High spam perspective score on comment with hyperlink reported for spam indique qu’un commentaire avec lien hypertexte signalé comme spam a été supprimé en raison d’un score Perspective élevé, et qu’un modérateur peut le réapprouver
  • Certains motifs de suppression incluaient une phrase indiquant que « si un modérateur approuve ce contenu, il sera moins souvent supprimé à l’avenir »
  • Dans le code public de Reddit, l’argument train_spam de admintools.spam détermine si les actions des modérateurs doivent être utilisées pour l’apprentissage de l’anti-spam
  • On peut interpréter cela comme le fait que l’approbation de publications légitimes dans un subreddit peut contribuer à réduire les faux positifs

Autres règles de suppression et inspection d’URL

  • Il y a eu des suppressions de liens de redirection Pinterest, de liens mega.nz, ainsi que de liens liés à des sous-domaines librement créables
  • Parmi les suppressions de liens mega.nz, certains cas étaient pourtant légitimes, par exemple un lien vers une archive vidéo YouTube, ce qui montre des faux positifs
  • Dans le cas Matched forbidden regex u'torenteu', il n’y avait pas directement torenteu dans le texte, mais la suppression a tout de même eu lieu
    • Reddit utilise unidecode pour convertir des chaînes Unicode en ASCII
    • Le coréen 토렌.트 pouvait, après conversion et traitements supplémentaires, correspondre à torenteu
  • Dans le cas Failed inspection: Phrase(s) [u'UA-49307539-'], la correspondance ne provenait ni du corps du commentaire ni du texte converti, mais de l’ID Google Analytics présent dans le HTML de la page vers laquelle le lien redirigeait
  • inspection semble correspondre à une opération où Reddit ouvre l’URL, suit les redirections, puis cherche des motifs dans la page
  • Lorsqu’un lien vers une page web contenant cette chaîne a été publié avec un compte de test, un compte vieux de 5 ans a été banni immédiatement et son historique de publication supprimé
    • Avec le compte d’un ami ayant davantage d’activité, la même reproduction n’a pas eu lieu
    • Il n’est pas certain que ce filtre soit encore actif ni que le bannissement du compte soit lié avec certitude, donc la chaîne réelle a été modifiée avant publication

Éléments passés et actuels de l’anti-spam de Reddit

  • Dans l’article Reddit Engineering de 2023, Protecting Reddit Users in Real Time at Scale, apparaissent Rule-Executor-V1, REV2 et Snooron
  • La chronologie comprise est la suivante
    • REV1 a été créé en 2016
    • Snooron a été développé en 2021 pour moderniser REV1
    • Environ deux ans plus tard, une migration vers REV2 a eu lieu
  • REV1 et REV2 fonctionnent avec des règles Lua, et des indices comme nil ainsi que le contexte temporel laissent penser à un possible lien avec spamurai
  • Les chaînes Unicode Python 2.7 comme u'torenteu' et u'UA-49307539-' peuvent provenir soit de code d’inspection en Python 2.7 en dehors de spamurai, soit d’un code d’inspection d’URL distinct appelé par REV1
  • D’après une présentation liée, Snooron fonctionne sur Flink Stateful Functions, effectue de la classification d’images et de l’OCR, et utilise Python 3 dans ses workers
  • En 2024, Reddit a indiqué dans des documents australiens eSafety utiliser Hive AI et la Google Vision OCR API pour l’OCR et la classification d’images et de vidéos
  • Hive OCR prend en charge 12 langues, Google OCR est utilisé conjointement pour couvrir davantage de langues, et Reddit indique aussi travailler sur un outil interne prenant en charge 80 langues
  • Dans un ticket de 2009, il a été confirmé que crm114 était un filtre anti-spam pouvant être entraîné par les modérateurs, et CRM114 est un ancien logiciel open source de classification de spam

Pourquoi publier cela en 2026

  • Il est estimé que publier ces informations en 2021 aurait pu être gravement dommageable pour le problème de spam de Reddit
  • En 2026, Perspective API is shutting down doit s’arrêter en fin d’année, donc même si Reddit l’utilise encore, une migration sera bientôt nécessaire
  • Il est également estimé que les LLM ont transformé l’industrie du spam, et que Reddit a probablement beaucoup remanié son système anti-spam d’ici 2026
  • Pour ces raisons, le risque lié à la publication de ces informations est considéré comme faible à l’heure actuelle

1 commentaires

 
GN⁺ 5 시간 전
Avis sur Lobste.rs
  • Un document et une étude intéressants. Comme le dit aussi la conclusion, il est rare d’avoir l’occasion de voir les détails de tels mécanismes anti-abus ; ce qui m’a particulièrement frappé, c’est la maîtrise très caractéristique de CSS par Lyra.
    Les barres de censure et les cercles rouges de l’UI Reddit reconstituée ressemblaient au début à des captures d’écran, mais il s’agissait en réalité de maquettes entièrement interactives.

    • Jusqu’à ce que je lise ce commentaire, je n’avais absolument pas remarqué que ce n’était pas une image.
  • J’attends toujours avec impatience chaque nouveau billet de blog. Le contenu est vraiment intéressant, et la capacité à recréer d’autres UI est excellente.
    Jusqu’ici, j’ai trouvé au moins un easter egg.

    • Merci. J’en ai mis pas mal dans cet article-ci ;)
  • Le passage où, pour tester avec son propre compte, il a publié la chaîne <pre>UA-49307539-2</pre> sur un site web puis l’a liée sur Reddit, ce qui a immédiatement suspendu un compte de test vieux de 5 ans et supprimé tout son historique de publications, était vraiment brutal.
    Il dit donc avoir remplacé le vrai numéro par UA-49307539- afin de ne pas publier un texte susceptible de tuer des comptes ; j’espère que ce compte était vraiment destiné aux tests et qu’il n’avait rien d’important.

  • Sur la dernière bêta développeur d’iOS de l’iPhone 16 Pro, en essayant de l’ouvrir avec Safari mobile, impossible de consulter <url> : l’erreur « a problem repeatedly occurred » apparaît.

    • Je n’ai aucune idée de la raison, et je n’ai pas d’iPhone sous la main pour l’instant.
      Si quelqu’un pouvait faire une recherche dichotomique dans le HTML pour trouver la cause du crash, je lui en serais vraiment reconnaissant.
  • Pour ceux que ça intéresse, la clé Perspective API incluse n’est pas valide.

    • Le fait que, dans bans (2016 - present), la société de conseil censurée comme exemple de spam soit Puppygirl Consulting donne aux accros des outils développeur un indice que les parties censurées sont probablement fausses ou des easter eggs :^)