Comenzaría con una descripción general estructural: desde una perspectiva de diseño, ¿están bien definidas las partes separadas del código? por ejemplo, ¿tiene un código de validación, funciones de entrada y salida, etc., que se utilizan para esos fines en todo el código base, o cada función es individual? ¿Tiene un código que sea funcionalmente seguro (a menudo ciertas construcciones de estilo no afectan la seguridad del flujo de datos)
Si tiene un envoltorio de seguridad que lleva a cabo la autenticación para cada función, es posible que pueda revisar estas funciones y simplemente verificar el uso de la función de envoltorio, por ejemplo.
Si es una base de código muy grande, entonces querrá ejecutar una herramienta como Fortify (u otras que @AviD podrá nombrar :-) para hacer una primera pasada al problema, pero todas las herramientas sufren una falta de inteligencia de contexto. Se identifican en base a firmas típicas, por lo que obtendrá falsos puntos positivos (y posiblemente falsos negativos, razón por la cual tener una buena descripción general puede ayudarlo a identificar los riesgos que una herramienta no detectará)
La idea es que la herramienta reduzca las posibles áreas de riesgo e identifique la gran mayoría de los problemas, ya que las herramientas son relativamente baratas, luego un ser humano valida y agrega a la salida de la herramienta, colocándola en el contexto del entorno de la aplicación.
A riesgo de parecer demasiado comercial, aconsejaría utilizar los servicios de un consultor de seguridad con experiencia que no solo conoce la herramienta de revisión de código y domina Java + Oracle, sino también alguien con experiencia en arquitectura empresarial basada en riesgos de seguridad.