UWP apps não funcionam com proxy de loopback (resolvido)

2023-09-07 computer debugging reversing_tag blog

Durante minha pesquisa para entender como funciona o login no Azure AD chegou a mim a informação muito pertinente de que proxies locais não funcionam por padrão com aplicativos UWP. Isso acontece porque além dos apps rodarem dentro de um AppContainer isolado com seu próprio SID, os privilégios desse SID por padrão são muito limitados. Talvez no futuro isso funcione, mas no momento não.

E a consequência disso foi que instalar um proxy http para análise de mensagens de login na Microsoft só funciona pelo browser.

Estava testando com o Burp e com o mitmproxy e em ambos o login no Microsoft Teams falhava apenas pelo aplicativo. O mesmo usuário logava normalmente pelo browser. Aliás, ao verificar as mensagens no log de eventos do sistema o AAD acusava um erro de 404 (informado na tela do Teams) e com a URI que retornou este erro. Se você acessar esta mesma URI pelo browser ela ainda funciona e cai na tela de login!

Como resolver

A resposta parece simples, apesar de nada intuitiva para o usuário final (às vezes nem para o programador). O aplicativo UWP que realiza login no Azure AD precisa ter o direito de acessar a rede por loopback. E para isso existe uma API chamada NetworkIsolationSetAppContainerConfig, onde se passa uma nova config para o AppContainer onde o app está localizado. O pseudo-código:

NetworkIsolationEnumAppContainers(firewallAppContainers);
foreach (app in firewallAppContainers)
{
  // that is the name of the app that show login window of office apps
  if (app.appContainerName.HasTheString("AAD.Broker") )
  {
      NetworkIsolationSetAppContainerConfig(app);
  }
}
[comment] [Merge de backups]