Basic Authentication na Google App Engine

Google App Engine (GAE) dla Javy udostępnia jedynie namiastkę implementacji Servlet Security opisanego w rozdziale SRV.12 specyfikacji Java Servlet 2.5. W pliku web.xml (/web-app/security-constraint/auth-constraint/role-namemożemy użyć tylko roli admin lub *. Nie ma możliwości wyboru metody uwierzytelniania (SRV.12.5). W zamian za to mamy możliwość skorzystania z uwierzytelniania przy użyciu konta Google lub przez zewnętrznego dostawcę OpenID oraz użycia Google Users Java API.

Spotkałem się z potrzebą ograniczenia dostępu do całej aplikacji na GAE (włącznie ze stroną główną) tylko do developerów. To co w standardowym kontenerze webowym skończyłoby się na modyfikacji paru wpisów w web.xml tutaj wymagało innego podejścia. Read more

Obejeście weryfikacji podpisu providera kryptograficznego na HotSpot JRE

Aby dodać do JCA provider kryptograficzny Javy zawierający implementację związaną z szyfrowaniem (dokładniej Cipher, KeyAgreement, KeyGenerator, MAC albo SecretKey) trzeba go wcześniej podpisać certyfikatem uzyskanym od firmy Oracle (lub IBM). Cytując za dokumentacją, w ten sposób JCA uwierzytelnia dostawcę żeby tylko providery podpisane przez zaufane podmioty mogły być włączone do JCA. Znalazłem lukę, która pozwala to wymaganie obejść.

Read more

Java HotSpot Cryptographic Provider signature verification issue [en]

According to the Java HotSpot documentation when instantiating a provider’s implementation (class) of a Cipher, KeyAgreement, KeyGenerator, MAC or SecretKey factory, the framework will determine the provider’s codebase (JAR file) and verify its signature. Even developer has to obtain a code-signing certificate from Oracle (or IBM) so that you can use it to sign your provider prior to testing. This way, JCA authenticates the provider and ensures that only providers signed by trusted entity can be plugged into JCA. However, I have found flaw which allows an attacker to bypass this requirement.

Read more