• chevron_right

      This week’s Reddit breach shows company’s security is (still) woefully inadequate

      news.movim.eu / ArsTechnica · Friday, 10 February, 2023 - 22:01

    This week’s Reddit breach shows company’s security is (still) woefully inadequate

    Enlarge (credit: Getty Images)

    Popular discussion website Reddit proved this week that its security still isn’t up to snuff when it disclosed yet another security breach that was the result of an attack that successfully phished an employee’s login credentials.

    In a post published Thursday, Reddit Chief Technical Officer Chris "KeyserSosa" Slowe said that after the breach of the employee account, the attacker accessed source code, internal documents, internal dashboards, business systems, and contact details for hundreds of Reddit employees. An investigation into the breach over the past few days, Slowe said, hasn’t turned up any evidence that the company’s primary production systems or that user password data was accessed.

    “On late (PST) February 5, 2023, we became aware of a sophisticated phishing campaign that targeted Reddit employees,” Slowe wrote. “As in most phishing campaigns, the attacker sent out plausible-sounding prompts pointing employees to a website that cloned the behavior of our intranet gateway, in an attempt to steal credentials and second-factor tokens.”

    Read 14 remaining paragraphs | Comments

    • chevron_right

      Des emails qui arrivent à tous les coups avec Sendgrid

      news.movim.eu / Korben · Thursday, 22 September, 2022 - 04:39 · 6 minutes

    — Article en partenariat avec Twilio —

    Qu’est-ce que Sendgrid ?

    Sendgrid est une suite d’outils et de services proposés par Twilio qui permet d’envoyer des emails, de créer des scénarios, des newsletters et d’automatiser tout ce qui concerne l’envoi de messages.

    Ainsi, plutôt que de configurer votre propre serveur pour envoyer des emails à partir de vos applications web, vous pouvez vous reposer sur Sendgrid pour faire le job. Les avantages sont nombreux : fiabilité, facilité d’implémentation, meilleure déliverabilité de vos messages et surtout vous ne risquez plus de vous faire blacklister votre serveur pour envoi de spams.

    Sendgrid est un outil qui peut s’utiliser comme ça, sans compétences techniques grâce à une myriade d’outils no-code, mais il est également très simple d’utiliser les APIs ou les bibliothèques proposées par Sendgrid pour justement interagir avec le service 100% en code, peu importe le langage.

    Sendgrid vous permet également de lier votre propre nom de domaine pour que vos adresses d’expéditeurs soient à vos couleurs, mais ce n’est pas une étape obligatoire.

    Créer des campagnes en no code

    Grâce à Sendgrid , vous pourrez bien sûr faire de l’envoi simple de newsletter sans rien à voir à coder ou à designer, simplement en choisissant un thème et en le modifiant avant de l’envoyer à votre liste de contact.

    Mais la valeur ajoutée la plus forte du service réside dans la section « Automatisations » (Automations en anglais) qui permet de créer facilement en remplissant quelques formulaires, tout un scénario à chaque nouvelle personne qui vous donne son adresse email.

    Par exemple, vous rentrez un nouvel abonné. Immédiatement vous lui envoyez un email de bienvenue. Puis quelques jours plus tard, vous renvoyez un message, et quelques jours ou semaines encore plus tard, vous pouvez lui envoyer d’autres messages…etc. L’idée c’est de préparer toute une suite d’emails qui sera envoyée au fur et à mesure du temps à votre nouvel inscrit. C’est très pratique pour fidéliser et communiquer de manière progressive avec vos abonnés sans avoir à envoyer la même chose à tout le monde.

    Grâce à Sendgrid, vous pouvez mettre en place tout cela rapidement directement via leur site, sans avoir de compétences techniques.

    Créer une campagne avec du code

    Créer des campagnes avec du code c’est également très simple puisque le site Sendgrid va vous guider dans l’utilisation de ces APIs. Il suffit de choisir d’utiliser la web API (ou le SMTP relay) pour ensuite être guidé selon le langage choisi : Python, Ruby, JavaScript, Go, PHP…etc.

    Ensuite, Sendgrid vous guidera étape par étape, de la création d’une clé API, à l’implémentation du code et vous permettra de valider que votre premier email de test a été correctement envoyé et que tout est OK.

    Une fois cette première étape franchie, vous pourrez alors tout faire avec du code : Créer des listes de contacts, les alimenter, supprimer des contacts, gérer des scénarios d’envoi d’emails, créer et programmer des newsletters…etc. C’est le bonheur, car c’est simple à intégrer et la documentation est très riche.

    Première connexion à Sendgrid avec Python

    Avant toute chose, il faut installer la lib sendgrid comme ceci :

    pip3 install sendgrid

    Ensuite vous devez vous créer une clé API en vous rendant sur la page suivante . Vous pouvez régler les autorisations de cette clé pour qu’elle vous donne par exemple l’accès aux fonctionnalités marketing (création de listes…etc.), à l’envoi de mail, à l’utilisation des templates…etc. A vous de faire vos réglages selon ce dont vous avez envie.

    À partir de là, il ne vous reste plus qu’à coder. Pour se brancher à l’API, il vous suffit donc d’utiliser le code suivant :

    from sendgrid import SendGridAPIClient
    
    sg = SendGridAPIClient('MA_CLÉ_API')
    

    Par exemple, si je veux créer une nouvelle liste de contact, je peux ajouter en dessous le code suivant :

    #create a list
    
    data = {
        "name": "MA LISTE"
    }
    response = sg.client.marketing.lists.post(
        request_body=data
    )
    print(response.status_code)
    print(response.body)
    print(response.headers)

    Et elle sera alors visible chez Sendgrid et je pourrais y ajouter des contacts.

    Voici un code pour ajouter un contact dans ma nouvelle liste. J’ai récupéré son ID auparavant :

    from sendgrid import SendGridAPIClient
    
    sg = SendGridAPIClient('MA_CLÉ_API')
    
    data = {
        "list_ids": ["a44be4a3-5cae-43f2-8ce5-cc32a042e54f"],
        "contacts": [
            {
                "email": "korben@korben.info",
                "first_name": "Korben",
                "last_name": "Manu",
                "country": "France"
            }
        ]
    }
    
    response = sg.client.marketing.contacts.put(request_body=data)
    
    print(response.status_code)
    print(response.body)
    print(response.headers)
    

    Ce qui est cool, c’est que si vous avez créé des champs personnalisés pour vos contacts, vous pouvez également les remplir directement via le code avec le champ « custom_fields ».

    L’importation de contact peut aussi se faire en codant l’importation d’un CSV.

    Si vous rencontrez des erreurs et que vous voulez obtenir un peu plus d’infos de la part de Sendgrid, je vous recommande d’ajouter l’importe suivant :

    from python_http_client.exceptions import HTTPError

    Et d’encapsuler le lancement de la requête comme ceci

    try:
        response = sg.client.marketing.contacts.put(request_body=data)
    except HTTPError as e:
        print(e.to_dict)

    Alors évidemment, je ne l’ai pas précisé, mais vous pouvez ainsi ajouter, modifier, supprimer des contacts, leur envoyer des messages, créer, modifier ou supprimer des listes et j’en passe.

    Il est également possible d’envoyer des emails directement à vos listes et je vais vous montrer comment.

    Un envoi d’email avec Sendgrid en Python

    Pour créer un envoi de mail, il suffit de le forger en respectant les spécifications de l’API.

    On spécifie ainsi dans l’objet data, l’ensemble des informations du mail, à savoir l’expéditeur (sender_id), le sujet, le contenu HTML et texte, le lien pour se désabonner ou encore la liste à laquelle envoyer le message…etc. Tout est bien sûr expliqué dans la doc de l’API.

    from sendgrid import SendGridAPIClient
    from sendgrid.helpers.mail import Mail
    
    sg = SendGridAPIClient('MA_CLÉ_API')
    
    data = {
        "name": "Ma newsletter 2",
        "status": "active",
            "email_config": {
                "sender_id": 4441081,
                "subject": "Quoi de neuf ?",
                "html_content": "<html><body><p>Cette semaine voici les nouveaux sujets...</p></body></html>",
                "plain_content": "Cette semaine voici les nouveaux sujets...",
                "custom_unsubscribe_url": "http://www.example.com/unsubscribe",
            },
        
        "send_to": {
            "list_ids": [
                "a44be4a3-5cae-43f2-8ce5-cc32a042e54f"
            ],    
        },
    }
    
    try:
        response = sg.client.marketing.singlesends.post(request_body=data)
    except HTTPError as e:
        print(e.to_dict)
    else:
        print(response.status_code)
        print(response.body)
        print(response.headers)
    

    Le coût de Sendgrid

    Au niveau des coûts de Sendgrid , ça dépend de votre consommation d’emails, mais la bonne nouvelle c’est qu’en dessous de 2000 contacts et de 6000 emails envoyés par mois c’est totalement gratuit ! C’est donc super pour essayer et commencer à monter un service autour de ça, pour ensuite basculer sur une option payante dès que l’audience est là.

    D’une manière générale, en comparant avec les prix de la concurrence, le prix au mail est assez équivalent à ce qu’on peut trouver ailleurs. Par contre, la vraie différence réside dans les outils et les services qui sont proposés sur Sendgrid. Avec Sendgrid, que vous soyez développeur confirmé ou simple amateur, vous pouvez en l’espace d’une journée mettre en place toute une automatisation d’emails ou créer votre newsletter.

    C’est à portée de tous !

    Découvrir Sendgrid

    • chevron_right

      Twilio Lookup – Une API pour valider un numéro de téléphone et réduire la fraude

      news.movim.eu / Korben · Monday, 12 September, 2022 - 06:16 · 6 minutes

    — Article en partenariat avec Twilio —

    Dernièrement, vous avez eu le plaisir de découvrir certains des services de Twilio, notamment l’API Verify qui permet de valider des utilisateurs , un super tuto pour envoyer des SMS en Python , ou encore la merveilleuse application de double authentification Authy .

    Cela vous a vraiment plu, du coup, je vous propose aujourd’hui de découvrir Lookup par Twilio

    Qu’est-ce que Lookup ?

    Enfin disponible dans sa version 2, Lookup est un service de Twilio qui se présente sous la forme d’un API et qui permet à ceux qui l’intègrent dans leurs projets de réduire les risques de fraude et de spam. Alors comment ça fonctionne ?

    Et bien lorsqu’un utilisateur entre son numéro de téléphone, l’API Lookup est capable de déterminer si ce numéro est valide en identifiant le type de ligne (mobile, fixe, VoIP, numéro temporaire, etc.). Pour cela, Lookup croise les informations données par l’utilisateur avec les informations données par les opérateurs téléphoniques pour vérifier qu’elle concordent. Cela permet d’éviter les fraudes de type SIM Swapping, la création de faux comptes, le vol de comptes ou le spam, notamment en détectant l’usage de numéros virtuels par définition suspects.

    Au-delà de cet aspect sécurité très important, le fait de pouvoir valider un numéro de téléphone permet d’éviter les erreurs de distribution de messages ou de payer pour des appels qui n’aboutiront jamais. Et comme cette vérification se fait de manière transparente sans solliciter l’utilisateur avec une validation de numéro de téléphone supplémentaire, les taux de conversion augmentent, car il y a moins de freins pour l’internaute.

    Dans sa v1, Lookup fonctionnait uniquement pour des numéros aux États-Unis et au Canada, mais avec cette v2, c’est l’Europe et le monde entier qui sont couverts. Tout est évidemment réalisé dans le respect du RGPD et les données personnelles associées au numéro ne sont pas récupérables via l’API.

    Pour cette démo, je vais vous montrer comment intégrer Lookup dans un script Python afin de faire :

    • De la validation simple de numéro
    • Obtenir la version internationalisée du numéro
    • Identifier l’opérateur et le type de ligne
    • Connaître le nom rattaché à un numéro

    Comment valider un numéro de téléphone avec Lookup ?

    J’ai écrit mes exemples en Python, en m’inspirant de la documentation officielle de Twilio, mais sachez qu’avec les libs disponibles, vous pouvez évidemment coder ce genre de choses dans le langage de votre choix (Ruby, C#, PHP, Java…etc.)

    Admettons que vous ayez une page web sur laquelle un internaute doit saisir son numéro de téléphone. Comment savoir si ce numéro est valide au moins pour la France et comment l’avoir dans sa version locale (06 12 13 14 15) et dans sa version internationale ?

    Et bien pour cela, vous devez vous munir de vos clés API Twilio pour la V2 de Lookup et appeler l’API Lookup comme ceci :

    from twilio.rest import Client
    
    account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    
    client = Client(account_sid, auth_token)
    
    phone_number = client.lookups.v2.phone_numbers('0612131415').fetch(country_code='FR')
    
    if phone_number.valid is True:
        print('Ce numéro est bien valide en France et sa version internationale est : ' + phone_number.phone_number)
    else:
        print('Ce numéro n\'est pas valide en France')
    

    Un bon moyen donc de contrôle que le numéro qui vous est transmis est le bon. D’ailleurs, pour identifier une erreur dans un numéro, vous pouvez également utiliser la propriété « validation_errors » comme ceci, qui vous renverra une de ces valeurs en cas d’erreur : TOO_SHORT, TOO_LONG, INVALID_BUT_POSSIBLE, INVALID_COUNTRY_CODE, INVALID_LENGTH, NOT_A_NUMBER.

    from twilio.rest import Client
    
    account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    
    client = Client(account_sid, auth_token)
    
    phone_number = client.lookups.v2.phone_numbers('+33451083391').fetch(
        fields='validation')
    
    print(phone_number.validation_errors)

    Comment récupérer les différentes versions d’un numéro ?

    En fonction du numéro saisi, vous pourriez avoir besoin soit de son code pays, soit du numéro international (code pays + numéro), soit de sa version locale :

    from twilio.rest import Client
    
    account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    
    client = Client(account_sid, auth_token)
    
    phone_number = client.lookups.v2.phone_numbers(
        '0612131415').fetch(country_code='FR')
    
    print('Le code indicatif : ' + phone_number.calling_country_code)
    print('Le code pays : ' + phone_number.country_code)
    print('Le numéro au format national : ' + phone_number.national_format)
    print('Le numéro au format international :  ' + phone_number.phone_number)

    Vous obtiendrez alors le résultat suivant :

    Le code indicatif : 33
    Le code pays : FR
    Le numéro au format national : 06 12 13 14 15
    Le numéro au format international :  +33612131415

    Savoir identifier l’opérateur et le type de ligne liés à un numéro de téléphone ?

    Un truc sympa avec l’API lookup de Twilio, c’est aussi la possibilité d’identifier l’opérateur et le type de ligne associé à un numéro. Ainsi, vous saurez si c’est un mobile, une ligne de fixe, un numéro VoIP…etc.

    Pour cela, on va utiliser la propriété « line_type_intelligence comme ceci :

    from twilio.rest import Client
    
    account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    
    client = Client(account_sid, auth_token)
    
    phone_number = client.lookups.v2.phone_numbers(
        '0612131415').fetch(country_code='FR', fields='line_type_intelligence')
    
    print('Opérateur téléphonique : ' + phone_number.line_type_intelligence["carrier_name"])
    print('Type de ligne : ' + phone_number.line_type_intelligence["type"])

    Et voici le type de retour que vous obtiendrez :

    Opérateur téléphonique : ORANGE FRANCE (01)
    Type de ligne : mobile

    D’autres fonctionnalités payantes ou encore en beta, permettent également de faire des choses très utiles comme la possibilité de savoir si la carte SIM a été swappé récemment (pour éviter les arnaques) ou tout simplement trouver le nom lié au numéro de téléphone. Mais ces options ne sont pas disponibles dans tous les pays. Je vous invite à consulter cette page pour les simswap .

    Comment savoir à qui appartient un numéro ?

    Cette possibilité ne fonctionne pas pour la France (Because RGPD), mais uniquement pour certains pays comme les États-Unis ou la Grande-Bretagne et uniquement pour certains numéros. Prenons par exemple ce numéro américain. En utilisant la propriété « caller_name », il est possible de savoir quel est le nom lié à ce numéro et savoir si c’est un numéro d’entreprise ou non.

    from twilio.rest import Client
    
    account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX"
    
    client = Client(account_sid, auth_token)
    
    phone_number = client.lookups.v2.phone_numbers(
        '+13475026441').fetch(fields='caller_name')
    
    print("Nom : " + phone_number.caller_name["caller_name"])
    print("Type de numéro : " +phone_number.caller_name["caller_type"])
    

    Voici ce que j’obtiens, à savoir le nom d’une entreprise de plomberie localisé à New York.

    Nom : RITE PLUMBING
    Type de numéro : BUSINESS

    Vous l’aurez compris, l’intégration de Lookup v2 dans vos applications est assez simple à mettre en œuvre et coûte très peu cher. Cela permet de vous assurer que les coordonnées téléphoniques saisies par un utilisateur sont correctes et qu’il ne s’agit pas d’un faux numéro ou d’un numéro qui fait l’objet d’une fraude notamment dans le cadre d’un SIM Swapping.

    Vous éliminerez également des opérations de validation de numéro assez pénibles pour l’utilisateur, ce qui vous permettra d’augmenter vos taux de conversion et surtout de réduire vos coûts d’envoi de messages en cas de numéro invalide. Bref, un must pour tous les projets qui exigent une validation correcte du numéro de téléphone d’utilisateurs.

    • chevron_right

      The number of companies caught up in the Twilio hack keeps growing

      news.movim.eu / ArsTechnica · Friday, 26 August, 2022 - 19:54 · 1 minute

    The number of companies caught up in the Twilio hack keeps growing

    Enlarge (credit: Getty Images)

    The fallout from this month's breach of security provider Twilio keeps coming. Three new companies—authentication service Authy, password manager LastPass, and food delivery service DoorDash—said in recent days that the Twilio compromise led to them being hacked.

    The three companies join authentication service Okta and secure messenger provider Signal in the dubious club of Twilio customers known to be breached in follow-on attacks that leveraged the data obtained by the intruders. In all, security firm Group-IB said on Thursday , at least 136 companies were similarly hacked, so it's likely many more victims will be announced in the coming days and weeks.

    Uncommonly resourceful

    The compromises of Authy and LastPass are the most concerning of the new revelations. Authy says it stores two-factor authentication tokens for 75 million users. Given the passwords the threat actor has already obtained in previous breaches, these tokens may have been the only things preventing the takeover of more accounts. Authy, which Twilio owns, said that the threat actor used its access to log in to only 93 individual accounts and enroll new devices that could receive one-time passwords. Depending on who those accounts belong to, that could be very bad. Authy said it has since removed unauthorized devices from those accounts.

    Read 6 remaining paragraphs | Comments

    • chevron_right

      Signal victime d’une attaque, 1.900 utilisateurs potentiellement touchés

      news.movim.eu / JournalDuGeek · Sunday, 21 August, 2022 - 12:00

    sans-titre-5-47-158x105.png

    Signal est la victime collatérale de la vaste attaque de phishing menée récemment contre Twilio. Les données volées chez ce partenaire de Signal ont concerné près de 2.000 utilisateurs de la messagerie sécurisée.

    Signal victime d’une attaque, 1.900 utilisateurs potentiellement touchés

    • chevron_right

      1,900 Signal users’ phone numbers exposed by Twilio phishing

      news.movim.eu / ArsTechnica · Monday, 15 August, 2022 - 20:59

    Signal's security-minded messaging app is dealing with a third-party phishing attempt that exposed a small number of users' phone numbers.

    Enlarge / Signal's security-minded messaging app is dealing with a third-party phishing attempt that exposed a small number of users' phone numbers. (credit: Getty Images)

    A successful phishing attack at SMS services company Twilio may have exposed the phone numbers of roughly 1,900 users of the secure messaging app Signal—but that's about the extent of the breach, says Signal, noting that no further user data could be accessed.

    In a Twitter thread and support document , Signal states that a recent successful (and deeply resourced) phishing attack on Twilio allowed access to the phone numbers linked with 1,900 users. That's "a very small percentage of Signal's total users," Signal writes, and all 1,900 affected users will be notified (via SMS) to re-register their devices. Signal, like many app companies, uses Twilio to send SMS verification codes to users registering their Signal app.

    With momentary access to Twilio's customer support console, attackers could have potentially used the verification codes sent by Twilio to activate Signal on another device and thereby send or receive new Signal messages. Or an attacker could confirm that these 1,900 phone numbers were actually registered to Signal devices.

    Read 3 remaining paragraphs | Comments

    • chevron_right

      Phishers who breached Twilio and fooled Cloudflare could easily get you, too

      news.movim.eu / ArsTechnica · Tuesday, 9 August, 2022 - 23:33

    Phishers who breached Twilio and fooled Cloudflare could easily get you, too

    Enlarge (credit: Getty Images)

    At least two security-sensitive companies—Twilio and Cloudflare—were targeted in a phishing attack by an advanced threat actor who had possession of home phone numbers of not just employees but employees' family members as well.

    In the case of Twilio, a San Francisco-based provider of two-factor authentication and communication services, the unknown hackers succeeded in phishing the credentials of an undisclosed number of employees and, from there, gained unauthorized access to the company's internal systems, the company said . The threat actor then used that access to data in an undisclosed number of customer accounts.

    Two days after Twilio's disclosure, content delivery network Cloudflare, also headquartered in San Francisco, revealed it had also been targeted in a similar manner. Cloudflare said that three of its employees fell for the phishing scam, but that the company's use of hardware-based MFA keys prevented the would-be intruders from accessing its internal network.

    Read 10 remaining paragraphs | Comments