RSEurope


Après avoir vu un internaute se faire avoir par une arnaque à l’auto-entreprise, consistant à demander une somme à payer via un courrier envoyé par voie postale, j’ai décidé de me pencher plus en détail sur une arnaque bien connue.

RSEurope

Tout commence par la réception d’une lettre reçue par voie posale, vous demandant, grâce à des informations publiques trouvable sur le site de l’Insee, de payer une certaine quantité d’argent, afin de légaliser la création de votre auto-entreprise, pourtant gratuite pour les professions libérales et agricoles.

RSEurope courrier

Loi n°55-4 concernant les annonces judiciaires et légales

Sur la page de la loi n°55-4 du site LegiFrance, on peut y lire :

Je cite: “L’insertion des annonces relatives aux sociétés et fonds de commerce dans les publications de presse ou les services de presse en ligne remplissant les conditions prévues au même article 2 est complétée par une insertion dans une base de données numérique centrale, dans des conditions définies par décret en Conseil d’Etat.”

N’étant pas juriste, je ne peux pas garantir l’exactitude des propos suivants, mais il me semble qu’une auto-entreprise n’est pas une société, ni un fond de commerce.

De plus, la publication dans la presse est réglementée par la loi (cf. https://entreprendre.service-public.gouv.fr/actualites/A17978), en fonction des départements. Si l’on prend le prix au caractère le plus élevé de 2025 (0,225 €), et que l’on considère l’offre moyenne. Et si on regarde la fiche d’une entreprise présente sur ce site (celle qui sera prise en exemple durant tout ce billet) : https://www.rseurope.org/company/Z9MHL734

On peut y lire, après extraction et calcul 306 caractères (spéciaux, alpha-numérique) faisant partis de l’annonce, soit une demande théorique de 68,85€ environ.

Encore une fois, ne connaissant ni le cadre juridique, ni la manière dont sont quantifiés les caractères et leur coût, le calcul est probablement inexacte, et n’est pas à prendre tel quel.

Néanmoins, le simulateur de l’État présent sur la page, et mentionné ci-après, affiche un forfait de 123€ HT pour une publication en Meurthe-et-Moselle. Source: https://www.service-public.gouv.fr/simulateur/calcul/tarifsAnnoncesLegales#main

Ce qui, vous le verrez après, n’est encore pas respecté par le site demandant 121€ TTC.

RSEurope - Le site

Comme on a pu le constater précédemment, le message offre tous les facteurs pour une bonne arnaque :

  • Un ancrage légal flou (texte existant, mais difficilement compréhensible pour le grand public)
  • Une demande qui, lu aux premiers abords laisse sous-entendre à une nécessité de paiement, mais si lu avec rigeur, permet à l’auteur de la lettre de se dédouaner de toutes responsabilités.
  • Un délai pour payer très cours (date d’émission = date d’échéance).
  • Un site de paiement n’étant pas affilié au gouvernement (.gouv.fr), et qui met un QR code pour vous permettre de payer plus vite.
  • Aucune condition générale de vente présente sur le site.

Maintenant, attaquons-nous au site internet. L’idée derrière ce billet de blog est de voir le chemin complet que peut suivre un client dans ce type d’arnaque, et de comprendre comment elles sont construites, et les principales différences avec les services copiés (ici l’URSSAF).

Page principale

La page principale contient deux formulaires. Le premier vous proposant d’activer votre espace professionnel, et le second vous permettant de recherche une entreprise.

Page principale

Encore une fois, ici le vocabulaire est inconsistent entre les pages. On peut remarquer que sur la lettre trouvée sur internet, le “code personnel” demandé sur le site fait référence à deux choses :

  1. Au numéro du dossier d’immatriculation, dont les 3 premiers caractères sont à omettre (FR-)
  2. La référence indiquée en bas de page.

En aucun cas, le code susmentionné n’apparait dans la lettre.

Des cookies, du beurre et du lait

À ce point dans mes recherches, 3 cookies sont venus accompagner ma visite :

  • cf_clearance: [...]-1760109238-1.2.1.1-jsMooOw.[...]
  • registredessocieteseuropeennes_session: vD1luEnTF5qnJvvoDQILHxa3czodWmB405vznqxH
  • XSRF-TOKEN: eyJpdiI6Ilg2ZmxtdE41THlwQ2ozdFovZjRJSEE9PSIsInZhbHVlIjoiVG8rQlRBdm93UlJqWCtabjd5U0w0d2pibThPMkNoUFQ3Nkl5MjNmUHY3Mlh6Sm93NjNFTUtYeFo5WldZTjRrN2UvazdpTjBZdHp2WlAyUEh3ZHpIWGN0QWIyWlU4R1EzbzFCWjFsQjhITy9RMklKajlhRmNBWjBVUzFDZnFZaW0iLCJtYWMiOiJjMDQ3NGMzZDE4NzJlNzQ1MzNmOGI0ZTE4MWM1MjI4NGM0NzBiOTU3M2NhNzAyOTFhNjA1NmRiYzk4ZDNlYjMwIiwidGFnIjoiIn0%3D

La question qui se pose ici est : “Quel est le role de chaque cookie dans le bon fonctionnement de l’application ?”

Déjà, le cookie cf_clearance est un cookie utilisé par Cloudflare pour protéger les sites internet de bots non invités à la fête. D’après les documentations officielles de Cloudflare, le cookie cf_clearance serait requis pour la détection JavaScript

Ce qu’ils entendent par “Détection JavaScript”, c’est le processus d’élimitation des requêtes automatisées sur le site par la résolution d’un challenge réalisé en JavaScript, démontrant la bonne activation et exécution du JavaScript sur la page.

Comme précisé dans leur article : https://developers.cloudflare.com/cloudflare-challenges/challenge-types/javascript-detections/

“JavaScript Detections is implemented on your website via […] invisible JavaScript […]”

“The snippets of JavaScript will contain a source pointing to the Challenge Platform, with paths that start with /cdn-cgi/challenge-platform/…”

“Once JavaScript Detections is injected on the HTML page, the visitor’s browser will run the JavaScript code snippet and a cf_clearance cookie is issued to the visitor. The information in JavaScript Detections is stored in the cf_clearance cookie and is used to populate js_detection.passed.”

Le suivant, registredessocieteseuropeennes_session est probablement un cookie de session custom créé en PHP pour suivre votre session. Probablement un des octets aléatoires encodés en base64.

Enfin, on a le jeton de XSRF-TOKEN, ici associé à Laravel. Plus particulièrement, on reconnait facilement un jeton encodé en base64 contenant un objet JSON grâce au eyJ qui débute la séquence. On peut vérifier ça facilement en décodant le jeton de la base64 :

atob("eyJpdiI6Ilg2ZmxtdE41THlwQ2ozdFovZjRJSEE9PSIsInZhbHVlIjoiVG8rQlRBdm93UlJqWCtabjd5U0w0d2pibThPMkNoUFQ3Nkl5MjNmUHY3Mlh6Sm93NjNFTUtYeFo5WldZTjRrN2UvazdpTjBZdHp2WlAyUEh3ZHpIWGN0QWIyWlU4R1EzbzFCWjFsQjhITy9RMklKajlhRmNBWjBVUzFDZnFZaW0iLCJtYWMiOiJjMDQ3NGMzZDE4NzJlNzQ1MzNmOGI0ZTE4MWM1MjI4NGM0NzBiOTU3M2NhNzAyOTFhNjA1NmRiYzk4ZDNlYjMwIiwidGFnIjoiIn0=") 
'{"iv":"X6flmtN5LypCj3tZ/f4IHA==","value":"To+BTAvowRRjX+Zn7ySL4wjbm8O2ChPT76Iy23fPv72XzJow63EMKXxZ9ZWYN4k7e/k7iN0YtzvZP2PHwdzHXctAb2ZU8GQ3o1BZ1lB8HO/Q2IJj9aFcAZ0US1CfqYim","mac":"c0474c3d1872e74533f8b4e181c52284c470b9573ca70291a6056dbc98d3eb30","tag":""}' 

On y reconnait les 3 valeurs (iv, value, et mac) spécifiques à Laravel également, ce qui confirme d’autant plus notre piste.

Recherche d’entreprise

Pour pouvoir passer à l’étape suivante, il va me falloir évidemment utiliser l’autre formulaire de recherche dans le but de trouver un identifiant valide à renseigner sur le premier formulaire.

On tombe sur la page : https://www.rseurope.org/search?keywords=Saumon Recherche entreprise

On peut y voir une liste d’entreprises ; probablement précédemment arnaquées.

En en ouvrant une par hasard, on peut y voir dans l’URL un identifiant qui ressemble en tout point à celui attendu dans la petite case d’activation de l’espace personnel : https://www.rseurope.org/company/Z9MHL734

Activation de l’espace personnel

Renseignement du code

Dès lors que l’identifiant est renseigné, une recherche se lance au bout d’une seconde et 200ième si le code a une taille supérieure ou égale à 7, tel que défini dans le code JavaScript au chargement de la page :

Javascript - Gestion de la référence

Dans notre recherche, la requête retourne un code success à 1, et une valeur de next à une URL pointant vers un autre site internet: https://registre-des-societes-europeennes.pro/regler-mon-avis/Z9MHL734

Réponse API

Grâce au code Javascript présent dans la page, on peut également déterminer que dans tous les cas (qu’importe l’adresse e-mail renseignée), on sera redirigé vers l’URL présente dans la valeur next.

Redirection code

Ici, on définit l’attribut action du formulaire code_form à l’adresse de redirection, ce qui aura pour effet de rediriger l’utilisateur vers l’URL en question. Source: https://developer.mozilla.org/fr/docs/Learn_web_development/Extensions/Forms/Sending_and_retrieving_form_data#lattribut_action

Formulaire de paiement - Registre des sociétés européennes

Maintenant que nous avons ces informations, on peut donc régler notre avis sur le nouveau site présent.

Encore une fois, je ne suis pas juriste, mais je ne sais pas si le premier site est condamnable en sachant qu’on ne paie pas dessus, mais comme les deux sont liés c’est étrange.

Dans tous les cas, si jamais vous devez payer une certaine somme, et que vous êtes amené à changer de site (ce qui n’est en soit pas normal), il est fortement conseillé de s’assurer de l’intégrité, et de l’origine du site internet.

Formulaire paiement

Ici, on doit encore mettre une adresse e-mail, alors j’ai mis n’importe quoi, et c’est passé.

Dans tous les cas, dans le JavaScript de la page, vous avez le code suivant :

<script>!function(e,o,t){e[t]=function(n,r){var c={sandbox:"https://sandbox-merchant.revolut.com/embed.js",prod:"https://merchant.revolut.com/embed.js",dev:"https://merchant.revolut.codes/embed.js"},d=o.createElement("script");d.id="revolut-checkout",d.src=c[r]||c.prod,d.async=!0,o.head.appendChild(d);var s={then:function(r,c){d.onload=function(){r(e[t](n))},d.onerror=function(){o.head.removeChild(d),c&&c(new Error(t+" is failed to load"))}}};return"function"==typeof Promise?Promise.resolve(s):s}}(window,document,"RevolutCheckout");</script>

<script type="module" src="https://merchant.revolut.codes/embed.js">
    import RevolutCheckout from "@revolut/checkout"
</script>
    
<script>
    RevolutCheckout("pk_ZWvatDLJydVEvmdA8F1peQKhfA6rA2eJM3IiTPAbPUPvRnz8").then(function (instance) {
  var card = instance.createCardField({
    target: document.getElementById("card-field"),
    onSuccess() {
      window.alert("Thank you!");
    },
    onError(message) {
      window.alert("Oh no :(");
        console.log(message);
    },
  });


  document
    .getElementById("button-submit")
    .addEventListener("click", function () {
      card.submit();
    });
});
</script>

Et un code commenté pour Stripe:

    /*const stripe = Stripe("pk_test_vaeftp5Ev7XZz03IH7eVYQwX");

// The items the customer wants to buy
const items = [{ id: "1" }];

let elements;

initialize();
checkStatus();

document
  .querySelector("#payment-form")
  .addEventListener("submit", handleSubmit);

// Fetches a payment intent and captures the client secret
async function initialize() {
  const { clientSecret } = await fetch("https://registre-des-societes-europeennes.pro/initiate-payment", {
    method: "POST",
    headers: { "Content-Type": "application/json", 'X-CSRF-TOKEN': "WhojyU9JesC3DGmBjQOkW6fKCdMteRThy5S51Hu1" },
    body: JSON.stringify({ items }),
  }).then((r) => r.json());

Et quand on y regarde plus en détail, dans les requêtes, on a pleins d’informations dont celles liées à Stripe : Stripe

{
	"client_secret": "pi_3SGiVWHGN8aO39bs0WIavFf8_secret_wZzW2CKhZRVAW7zRvAcqeeKPg",
	"key": "pk_live_51PWdzqHGN8aO39bsEPyjSdv0v06FmEn3lzoM5512f7Va1AzUDCjwwDBug2t8KVYhuDWSD6FeXCjRyhW6tSy6Cubr00eTg4HRBn",
	"elements_init_source": "stripe.elements",
	"referrer_host": "eurolib.pro",
	"stripe_js_id": "b10ce364-688c-40d8-8676-7be74e2db412",
	"top_level_referrer_host": "registre-des-societes-europeennes.pro",
	"locale": "en",
	"expand[0]": "payment_method_preference.payment_intent.payment_method",
	"type": "payment_intent"
}

Vous pouvez récupérer le fichier har contenant toutes les requêtes stripe de cette page.

Revolut checkout ID : pk_ZWvatDLJydVEvmdA8F1peQKhfA6rA2eJM3IiTPAbPUPvRnz8

Clé Stripe de test : pk_test_vaeftp5Ev7XZz03IH7eVYQwX

Les autoentreprises déclarées à l’URSSAF paient via un mandat de prélèvement SEPA émis par l’URSSAF.