Faits : A. A._, né en 1962, a travaillé comme chef d'équipe (maçon) auprès de l'entreprise B._ SA dès le 24 juillet 1989. A ce titre, il était assuré contre le risque d'accidents auprès de la Caisse nationale suisse d'assurance en cas d'accidents (ci-après: la CNA). Dans une déclaration d'accident du 9 mai 2012, l'employeur a annoncé que l'assuré s'était blessé à la cheville droite le 8 mai 2012 (multiples fractures ouvertes du pilon tibial). La CNA a pris en charge le cas. A._ s'est soumis à des interventions chirurgicales à son membre inférieur droit les 8, 21 mai 2012, 11 mars 2013 et 17 septembre 2015. Il a également séjourné à la Clinique romande de réadaptation (CRR) de la CNA à Sion du 25 juin au 22 juillet 2014 (rapport du 29 juillet 2014) et du 2 au 30 novembre 2016. Dans un rapport établi le 3 février 2017, les docteurs C._, spécialiste en médecine physique et réadaptation, et D._, médecin assistant auprès de la CRR, ont diagnostiqué - avec répercussion sur la capacité de travail - un status post fracture du dôme talien et fracture ouverte du pilon tibial droit (selon la classification de Gustilo, de type II), une atteinte distale mixte du nerf péronier droit à prédominance sensitive, un status post ablation du matériel d'ostéosynthèse (clou trans-plantaire, ostéotomie d'extension du tibia distal droit et arthrodèse péronéo-tibiale distale (du 17 septembre 2015), un status post ablation du matériel d'ostéosynthèse du tibia droit et arthrodèse tibio-talienne par clou rétrograde (du 11 mars 2013), un status post ablation du fixateur externe, réduction ouverte et ostéosynthèse du tibia distal à droite par une double ostéosynthèse, greffe de Thiersch et mise en place d'une attelle plâtrée (du 21 mai 2012) et un status post débridement de la fracture ouverte du tibia droit et stabilisation de la cheville par fixateur externe à droite (du 8 mai 2012). En se fondant sur l'avis de son médecin d'arrondissement remplaçant (du 17 mai 2017), la CNA a mis fin à la prise en charge du cas avec effet au 30 novembre 2017. Par décision du 29 novembre 2017, confirmée sur opposition le 15 février 2018, la CNA a octroyé à l'assuré une rente d'invalidité de l'assurance-accidents de 23 % avec effet au 1 er décembre 2017 ainsi qu'une indemnité pour atteinte à l'intégrité de 20 %. B. A._ a déféré cette décision au Tribunal cantonal du canton de Vaud, Cour des assurances sociales, puis produit notamment l'avis du docteur E._, spécialiste en médecine interne générale (du 26 avril 2018), et le rapport des docteurs F._, médecin praticien, et G._, spécialiste en chirurgie orthopédique et traumatologie de l'appareil locomoteur (du 28 juin 2018). Statuant par jugement du 31 janvier 2019, la cour cantonale a rejeté le recours et confirmé la décision sur opposition rendue le 15 février 2018. C. A._ forme un recours en matière de droit public contre ce jugement dont il demande la réforme. Il conclut principalement à l'octroi d'une rente entière d'invalidité de l'assurance-accidents. Subsidiairement, il demande le renvoi de la cause à l'autorité précédente pour nouvelle décision dans le sens des considérants. Le recours est assorti d'une demande d'assistance judiciaire. La CNA conclut au rejet du recours, tandis que l'autorité précédente et l'Office fédéral de la santé publique ont renoncé à se déterminer.