Developpez.com - Rubrique Dév. Web

Le Club des Développeurs et IT Pro

Le navigateur DuckDuckGo (sous Android et iOS) envoie les noms de tous les hôtes visités par ses utilisateurs vers son serveur

Depuis mars 2018

Le 2020-07-02 19:02:53, par Patrick Ruiz, Chroniqueur Actualités
« Le moteur de recherche qui ne vous espionne pas » est le slogan de DuckDuckGo, le navigateur qui se retrouve au centre de soupçons de pistage de ses utilisateurs. Code source à l’appui, certains ont établi que ce dernier (sous Android et iOS) envoie les noms de tous les hôtes visités vers son serveur, ce qui ouvre des possibilités au pistage des utilisateurs. Le cas qui suscite une crise de confiance (compte tenu de la proposition de valeur du navigateur en lien avec le respect de la vie privée) est en cours de résolution.

Les signalements sont partis du morceau de code suivant qui n’a pas manqué d’attirer l’attention d’utilisateurs pointilleux sur Android.

Code :
1
2
3
4
5
6
7
private const val faviconBaseUrlFormat = "https://icons.duckduckgo.com/ip3/%s.ico"

fun Uri?.faviconLocation(): Uri? {
    val host = this?.host
    if (host.isNullOrBlank()) return null
    return Uri.parse(String.format(faviconBaseUrlFormat, host))
}
Le fait ici est qu’il y a une fonction chargée de récupérer le nom de l’hôte courant et de l’envoyer à un service hébergé sur duckduckgo.com ; ce dernier a son URL sauvegardée au sein de la constante faviconBaseUrlFormat. Au sein de celle-ci, %s est remplacé par le nom d’hôte courant. Dit d’une autre façon, lors de la visite d’une page comme test.com sur la version Android ou iOS de DuckDuckGo, l’icône du site web est chargée depuis https://icons.duckduckgo.com/ip3/test.com.ico qui se trouve être une page sur le serveur DuckDuckGo.

Sur iOS, même son de cloche :

Code :
1
2
3
4
5
6
7
static let externalContentBase = "https://external-content.duckduckgo.com"
    static let faviconService = "\(externalContentBase)/ip3/%@.ico"

    public func faviconUrl(forDomain domain: String) -> URL? {
        let urlString = String(format: Url.faviconService, domain)
        return URL(string: urlString)
    }
En fait, cette disposition concerne, semble-t-il, chaque onglet ouvert dans le navigateur :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
private func configureFavicon(forDomain domain: String?) {
        let placeholder = #imageLiteral(resourceName: "GlobeSmall")
        favicon.image = placeholder

        if let domain = domain {
            let faviconUrl = AppUrls().faviconUrl(forDomain: domain)
            favicon.kf.setImage(with: faviconUrl,
                                  placeholder: placeholder,
                                  options: [.downloader(NotFoundCachingDownloader())],
                                  progressBlock: nil,
                                  completionHandler: nil)
        }
    }
Les marque-pages ne sont pas en reste si l’on en croit les retours des utilisateurs sur la version iOS :

Code :
1
2
3
4
5
6
7
 private func configureFavicon(forDomain domain: String?) {
        favicon.image = BookmarkCell.placeholderFavicon
        if let domain = domain {
            let faviconUrl = AppUrls().faviconUrl(forDomain: domain)
            favicon.kf.setImage(with: faviconUrl, placeholder: BookmarkCell.placeholderFavicon)
        }
    }
La limite est mince quand on sait que cet état de choses peut impliquer l’envoi d’une adresse IP. Ainsi, bonjour aux possibilités de pistage des utilisateurs, toute chose qui est au contraire aux valeurs dont l’équipe qui est derrière le navigateur fait la promotion. La fonctionnalité a fait l’objet d’ajout au navigateur en mars 2018.



Dans une sortie en lien avec ces développements, le CEO de DuckDuckGo se veut rassurant : « Je viens d’avoir connaissance de ce problème et je suis heureux de prendre l’engagement que nous le fassions de façon locale dans le navigateur. Nous ferons en sorte que cela se fasse le plus rapidement possible. Cela dit, je tiens à préciser que nous n'avons pas collecté d'informations personnelles. Comme d'autres membres du personnel l'ont indiqué, nos services sont chiffrés et, de par leur conception, rejettent des informations comme les adresses IP. Cependant, j'estime qu'il est néanmoins plus sûr de le faire au niveau local et c'est ce que nous ferons. »

Source : 1, 2

Et vous ?

Êtes-vous un utilisateur de DuckDuckGo ? Si oui, cette situation est-elle de nature à effriter la confiance que vous avez en ce navigateur ?
Qu’est-ce qui d’un point de vue technique peut justifier l’approche adoptée par l’équipe DuckDuckGo pour retrouver l’icône d’un hôte courant ?
En tant que développeur web quelle approche suggérez-vous qui soit respectueuse de la vie privée ?

Voir aussi :

DuckDuckGo propose le Do Not Track Act, un projet de loi qui obligerait les sites à ne pas pister les internautes qui utilisent Do Not Track
DuckDuckGo utilise maintenant Apple Maps pour alimenter les résultats de la recherche privée
DuckDuckGo accusé de faire du profilage des utilisateurs malgré sa promesse d'être l'anti-Google, le moteur assure qu'il n'en est rien
Google cède et transfère Duck.com à DuckDuckGo afin de dissiper la confusion des utilisateurs, même si les détails de cette entente ne sont pas connus
  Discussion forum
9 commentaires
  • strato35
    Membre éclairé
    Envoyé par denisys
    Ce n’est pas plus pire, qu’avec GOOGLE !!!
    Sans oublier APPLE !!!
    Tout comme le COVID, C'est pas plus pire que le CANCER
    Sans oublier le SIDA !!!

    Et c'est pas pour autant que j'aimerai l'avoir.

    Ouais l'exemple est pas ouf, mais bon comme ils ont dit que tout était chiffré et qu'ils corrigeraient le problème, je vois pas pour l'instant pas vraiment de raison de ne plus utiliser duckduckgo, d'autant que je le trouve plus performant que StartPage, et tant qu'il n'y a pas de scandale ou de preuve réelle d'utilisation des données, ya pas de raison de fuir le service à tout prix.
  • zempa
    Futur Membre du Club
    Envoyé par piwee
    @kevin254kl Il y Qwant, moteur français qui assure aussi la confidentialité
    A la vue des investigations faites par NexInpact, perso, je n'utilise plus Qwant.
  • denisys
    Membre chevronné
    Ce n’est pas plus pire, qu’avec GOOGLE !!!
    Sans oublier APPLE !!!
  • Fooshi
    Membre averti
    Il y a un truc qui m'étonne, c'est la différence entre le titre de la news et le code source que je vois.

    Code :
    1
    2
    3
    4
    5
    6
    7
    private const val faviconBaseUrlFormat = "https://icons.duckduckgo.com/ip3/%s.ico"
    
    fun Uri?.faviconLocation(): Uri? {
        val host = this?.host
        if (host.isNullOrBlank()) return null
        return Uri.parse(String.format(faviconBaseUrlFormat, host))
    }
    Ce code en Kotlin qui est une extension utilise l'adresse d'hôte actuel du navigateur pour construire une url à partir d'une chaine de caractère, c'est du simple formatage. Tout ce fait donc au niveau local, il n'y a pas de remontées d'informations sur le serveur. Cela nécessiterais l'appel d'une API avec l'utilisation d'une librairie pour effectuer ces appels ce qui n'est pas le cas.
  • XanatosAO
    Membre régulier
    @kevin254kl : J'utilise Ecosia : vie privée + plantations d'arbres, ça me va.
  • darklinux
    Membre extrêmement actif
    Je ne vais pas faire mon étonné ...
  • kevin254kl
    Membre chevronné
    Bien triste, du coup quelqu'un a une alternative à duckduckgo?
  • zempa
    Futur Membre du Club
    @Fooshi, dans le second lien en source, il semblerait que cette URL formatée soit appelée à chaque chargement d'onglet : https://github.com/duckduckgo/iOS/issues/665

    @kevin254kl J'ai perso adopté https://swisscows.com/ comme moteur de recherche par défaut.
  • piwee
    Nouveau membre du Club
    @kevin254kl Il y Qwant, moteur français qui assure aussi la confidentialité