Your render passes setup looks weird to me. The steps pass should be the delegate of the ssao pass. Here is how the VTK test initializes the render passes:
vtkNew<vtkRenderStepsPass> basicPasses;
vtkNew<vtkSSAOPass> ssao;
ssao->SetRadius(0.05);
ssao->SetKernelSize(128);
ssao->SetDelegatePass(basicPasses);
vtkOpenGLRenderer* glrenderer = vtkOpenGLRenderer::SafeDownCast(renderer);
glrenderer->SetPass(ssao);
Is the result the same if you use this code?