Os bits no umask do processo atual são apagados quando o arquivo é criado. Neste caso, parece que o umask é 0002 (no world write). Ligue para umask() antes de chamar open() para alterar isso.
Soapbox: por favor, não crie arquivos graváveis do mundo, a menos que você esteja realmente certo de que é isso que você quer. O umask existe para salvar você e seus usuários de exatamente esse tipo de vulnerabilidade.