1. A method for statically analyzing a software application performed by at least one processor comprising the steps of: statically generating an abstract interpretation of said software application which approximates runtime states of said software application, herein said abstract interpretation preserves said software application's information flow properties; and verifying a correctness of safety states of the abstract interpretation to identify vulnerabilities in said software application.